2018年5月15日 星期二

從 window 找到 application path PID

 Enumerating All Processes
https://msdn.microsoft.com/en-us/library/windows/desktop/ms682623.aspx

Snapshot Process 32 First Process Next Enum Processes
Kernel32 CreateToolhelp32Snapshot
CreateToolhelp32Snapshot
Process32First 找到第一個
Process32Next 下一個
EnumProcesses
QueryFullProcessImageName  
https://msdn.microsoft.com/zh-tw/library/windows/desktop/ms684919(v=vs.85).aspx

EnumWindows() 列舉出所有視窗
FindWindow() FindWindowEx() 找到窗體
GetWindowThreadProcessId() 找 process ID 擁有這 窗
OpenProcess() 得到 HANDLE
GetModuleFileNameEx()
GetProcessImageFileName()
QueryFullProcessImageName()
GetWindowModuleFileName()


EnumWindows FindWindow FindWindowEx GetWindowThreadProcessId OpenProcess GetModuleFileName GetProcessImageFileName QueryFullProcessImageName GetWindowModuleFileName

如何創建 單一 唯一執行 執行檔 傳 參數 CreateParams paramstr


How to run a single instance of an application
http://delphidabbler.com/articles?article=13
delphi Process Param Create Params paramstr
如何創建 單一 唯一執行 執行檔 傳 參數

本篇教你 傳遞 參數 給 程式 , 可以 確認 運作 或是 重複的 執行  或是 結束他

首先動作是

傳遞 個  window message WM_COPYDATA

運作如

先找  window 存在?
喚醒她
傳送window message
決定 是否結束他

你可以用 findwindows 找到自己 預留 的接收端

SwitchToPrevInst 你可以 前後找

可以對 其他 window 做 傳送 SendMessage( Wdw, WM_COPYDATA, 0, LPARAM(@CopyData)

Data 必須是 動態產生的  alloc ...



後面有下載