Click here to Skip to main content
15,891,828 members
Home / Discussions / C#
   

C#

 
QuestionHow to get ios device capacity using MDM profiling Pin
Veridic Anil4-Aug-20 22:25
Veridic Anil4-Aug-20 22:25 
AnswerRe: How to get ios device capacity using MDM profiling Pin
Gerry Schmitz5-Aug-20 5:58
mveGerry Schmitz5-Aug-20 5:58 
QuestionDataBase in User Control Pin
Ismael_19994-Aug-20 4:15
Ismael_19994-Aug-20 4:15 
AnswerRe: DataBase in User Control Pin
OriginalGriff4-Aug-20 4:32
mveOriginalGriff4-Aug-20 4:32 
GeneralRe: DataBase in User Control Pin
Gerry Schmitz4-Aug-20 6:12
mveGerry Schmitz4-Aug-20 6:12 
GeneralRe: DataBase in User Control Pin
OriginalGriff4-Aug-20 6:26
mveOriginalGriff4-Aug-20 6:26 
QuestionHow can I get handle (IntPtr) to a "sub"-form in another application? Pin
arnold_w31-Jul-20 2:38
arnold_w31-Jul-20 2:38 
AnswerRe: How can I get handle (IntPtr) to a "sub"-form in another application? Pin
Eddy Vluggen31-Jul-20 2:53
professionalEddy Vluggen31-Jul-20 2:53 
GeneralRe: How can I get handle (IntPtr) to a "sub"-form in another application? Pin
arnold_w31-Jul-20 4:03
arnold_w31-Jul-20 4:03 
GeneralRe: How can I get handle (IntPtr) to a "sub"-form in another application? Pin
Richard MacCutchan31-Jul-20 4:49
mveRichard MacCutchan31-Jul-20 4:49 
AnswerRe: How can I get handle (IntPtr) to a "sub"-form in another application? Pin
arnold_w31-Jul-20 11:03
arnold_w31-Jul-20 11:03 
GeneralRe: How can I get handle (IntPtr) to a "sub"-form in another application? Pin
Gerry Schmitz31-Jul-20 12:41
mveGerry Schmitz31-Jul-20 12:41 
GeneralRe: How can I get handle (IntPtr) to a "sub"-form in another application? Pin
Richard Andrew x6431-Jul-20 16:22
professionalRichard Andrew x6431-Jul-20 16:22 
GeneralRe: How can I get handle (IntPtr) to a "sub"-form in another application? Pin
arnold_w31-Jul-20 23:09
arnold_w31-Jul-20 23:09 
GeneralRe: How can I get handle (IntPtr) to a "sub"-form in another application? Pin
arnold_w31-Jul-20 23:58
arnold_w31-Jul-20 23:58 
GeneralRe: How can I get handle (IntPtr) to a "sub"-form in another application? Pin
Richard Andrew x641-Aug-20 1:44
professionalRichard Andrew x641-Aug-20 1:44 
GeneralRe: How can I get handle (IntPtr) to a "sub"-form in another application? Pin
arnold_w1-Aug-20 1:55
arnold_w1-Aug-20 1:55 
AnswerRe: How can I get handle (IntPtr) to a "sub"-form in another application? Pin
Richard Andrew x641-Aug-20 1:47
professionalRichard Andrew x641-Aug-20 1:47 
GeneralRe: How can I get handle (IntPtr) to a "sub"-form in another application? Pin
arnold_w1-Aug-20 2:04
arnold_w1-Aug-20 2:04 
GeneralRe: How can I get handle (IntPtr) to a "sub"-form in another application? Pin
Richard Andrew x641-Aug-20 2:07
professionalRichard Andrew x641-Aug-20 2:07 
GeneralRe: How can I get handle (IntPtr) to a "sub"-form in another application? Pin
arnold_w1-Aug-20 2:45
arnold_w1-Aug-20 2:45 
Ahhh, you mean this:
C#
const uint WM_GETTEXT = 0x000D;
StringBuilder message = new StringBuilder(1000);
SendMessage(handle, WM_GETTEXT, message.Capacity, message);
Yes, that works great!!! Thank you! This is the complete code:
C#
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        WindowWrapper parentForm = ProcessWindowsHelper.getHandleToAnotherProcessWindow("TortoiseGitProc", "Switch/Checkout");
        MessageBoxEx.Show(parentForm, "Hello on top of TortoiseGit Switch/Checkout dialog");
    }
}
public class ProcessWindowsHelper
{
    private delegate bool EnumThreadWndProc(IntPtr hWnd, IntPtr lp);
    [DllImport("user32.dll")]
    private static extern bool EnumThreadWindows(int tid, EnumThreadWndProc callback, IntPtr lp);
    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, StringBuilder lParam);
    delegate bool EnumThreadDelegate(IntPtr hWnd, IntPtr lParam);

    private const uint WM_GETTEXT = 0x000D;

    public static WindowWrapper getHandleToAnotherProcessWindow(string processName, string substringInAnotherProcessWindow)
    {
        Process myProcess = findProcessByName(processName);
        IEnumerable<IntPtr> allHandlesInMyProcess = EnumerateProcessWindowHandles(myProcess.Id);
        foreach (IntPtr handle in allHandlesInMyProcess)
        {
            StringBuilder message = new StringBuilder(1000);
            SendMessage(handle, WM_GETTEXT, message.Capacity, message);
            if (message.ToString().Contains(substringInAnotherProcessWindow))
            {
                Debug.WriteLine(message);
                return new WindowWrapper(handle);
            }
        }
        return null;
    }

    private static IEnumerable<IntPtr> EnumerateProcessWindowHandles(int processId)
    {
        List<IntPtr> handles = new List<IntPtr>();
        ProcessThreadCollection processThreadCollection = Process.GetProcessById(processId).Threads;
        for (int i = 0; i < processThreadCollection.Count; i++)
        {
            ProcessThread thread;
            thread = processThreadCollection[i];
            EnumThreadWindows(thread.Id, 
                delegate(IntPtr hWnd, IntPtr lParam)
                {
                    handles.Add(hWnd);
                    return true;
                }, 
                IntPtr.Zero);
        }
        return handles;
    }

    private static Process findProcessByName(string processName)
    {
        Process[] allProcesses = Process.GetProcesses();
        for (int j = 0; j < allProcesses.Length; j++)
        {
            if (allProcesses[j].ProcessName.Equals(processName))
            {
                return allProcesses[j];
            }
        }
        return null;
    }
}


public class WindowWrapper : IWin32Window
{
    public WindowWrapper(IntPtr handle)
    {
        _hwnd = handle;
    }

    public IntPtr Handle
    {
        get { return _hwnd; }
    }

    private IntPtr _hwnd;
}
The class MessageBoxEx can be found here: Parent centered MessageBox dialog in C# · GitHub[^]

modified 1-Aug-20 9:49am.

GeneralRe: How can I get handle (IntPtr) to a "sub"-form in another application? Pin
Richard Andrew x641-Aug-20 3:24
professionalRichard Andrew x641-Aug-20 3:24 
GeneralRe: How can I get handle (IntPtr) to a "sub"-form in another application? Pin
arnold_w1-Aug-20 3:49
arnold_w1-Aug-20 3:49 
GeneralRe: How can I get handle (IntPtr) to a "sub"-form in another application? Pin
Richard Andrew x641-Aug-20 4:31
professionalRichard Andrew x641-Aug-20 4:31 
GeneralRe: How can I get handle (IntPtr) to a "sub"-form in another application? Pin
arnold_w1-Aug-20 5:22
arnold_w1-Aug-20 5:22 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.