背景:啟動第三方登入程式,並補全賬號和密碼訊息;
工具:spy++,獲取第三方登入窗體的控制代碼、標題等;
引用api:
[dllimport("user32.dll", entrypoint = "findwindow")]
public extern static intptr findwindow(string lpclassname, string lpwindowname);
[dllimport("user32.dll", entrypoint = "findwindowex", setlasterror = true)]
public static extern intptr findwindowex(intptr hwndparent, intptr hwndchildafter, string lpszclass, string lpszwindow);
[dllimport("user32.dll", entrypoint = "sendmessage", setlasterror = true, charset = charset.auto)]
public static extern int sendmessage(intptr hwnd, uint wmsg, int wparam, int lparam);
[dllimport("user32.dll")]
public static extern int enumchildwindows(intptr hwndparent, callback lpfn, int lparam);
public delegate bool callback(intptr hwnd, int lparam);
實現思路:
1、啟動第三方程式,獲取到登入窗體的控制代碼;
2、通過spy++工具查詢到賬號和密碼輸入框、登入按鈕的類、標題等資訊;
3、呼叫api裡面的findwindowex方法查詢到輸入框或按鈕的控制代碼;
主窗體獲取不到的時候,可以通過呼叫方法enumchildwindows枚舉子窗體繼續查詢;
4、呼叫sendmessage方法傳送訊息;
傳送字串訊息:for (int i = 0; i < ch.length; i++)
傳送按鈕訊息:sendmessage(loginbutton, 0xf5, 0, 0);
結果:完成!
ShellExecuteEx呼叫第三方程式
呼叫第三方程式有很多方法,包括system winexec createprocess,shellexecute,shellexecuteex。對比這幾個啟動程序的函式,總結下來功能完善而且好用的就是 shellexecuteex函式了。這個函式不僅可以傳入引數到第三方而且能夠傳回程序控制代碼用於操...
第三方程式呼叫django的models
一下來自pythoncn的maillist 今天折騰了一上午,終於可以在外部的wx裡面呼叫django的models了。但是,突然發現我好好的中文介面一下變成英文了。後來檢查了一下發現原來是 os.environ django settings module website.settings add...
Qt中使用QProcess呼叫第三方程式
在qt中呼叫第三方程式通常使用qprocess進行呼叫,以下描述qprocess常用的介面。1.qprocess startdetached qprocess startdetached const qstring program,const qstringlist arguments,const ...