#Include "windows.bi" #include "win\tlhelp32.bi" Declare Sub TastenSim(taste As String = "") Type IINPUT itype As Integer Union mi As MOUSEINPUT ki As KEYBDINPUT hi As HARDWAREINPUT End Union End Type Dim As Integer pid Dim As IINPUT ip Dim As HWND hWndDest, hWndSource Dim As LPDWORD prozess Dim As HANDLE snapshothandle Dim As PROCESSENTRY32 prozessantwort Dim As ZString * 300 titel Dim As WINDOWPLACEMENT swpos, dwpos 'fensterhandle des zielfensters ermitteln snapshothandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0) 'handle für systemschnappschuß erstellen prozessantwort.dwSize = SizeOf(prozessantwort) 'größe der datenstruktur für antwort übergeben Process32First(snapshothandle,@prozessantwort) 'ersten prozesshandle suchen (ist SYSTEM IDLE PROCESS) Do While Process32Next(snapshothandle, @prozessantwort) 'alle prozesse durchsuchen If LCase(prozessantwort.szExeFile) = "audacity.exe" Then 'prozess gehört zu audacity pid = prozessantwort.th32ProcessID 'zugehörige prozess-ID hWndDest = GetWindow(FindWindow(0,0), GW_HWNDFIRST) 'erstes fensterhandle Do hWndDest = GetWindow(hWndDest,GW_HWNDNEXT) 'nächstes fensterhandle GetWindowThreadProcessId(hWndDest, @prozess) 'prozess-ID des fensters ermitteln If pid = prozess Then 'fenster gehört zum gesuchten prozess If IsWindowVisible(hWndDest) Then 'hauptfenster GetWindowPlacement(hWndDest,@dwpos) 'fensterkoordinaten ermitteln Exit Do, Do 'suche beenden EndIf EndIf Loop While hWndDest EndIf Loop CloseHandle(snapshothandle) 'ressourcen freigeben If hWndDest = 0 Then Print "FEHLER: Zielfenster nicht verfuegbar" Sleep End EndIf 'fensterhandle des quellfensters ermitteln hWndSource = GetWindow(FindWindow(0,0), GW_HWNDFIRST) 'erstes fensterhandle Do hWndSource = GetWindow(hWndSource,GW_HWNDNEXT) 'nächstes fensterhandle If IsWindowVisible(hWndSource) Then GetWindowText(hWndSource,@titel,300) 'fenstertitel ermitteln If LCase(titel) = "h:\test" Then 'gesuchtes fenster GetWindowPlacement(hWndSource,@swpos) 'fensterkoordinaten ermitteln Exit Do 'suche beenden EndIf EndIf Loop While hWndSource If hWndSource = 0 Then Print "FEHLER: Quellfenster nicht verfuegbar" Sleep End EndIf 'drag & drop simulieren ShowWindow(hWndSource,SW_RESTORE) 'quellfenster sichtbar machen Do SetForegroundWindow(hWndSource) 'quellenfenster in den vordergrund holen Sleep 100 Loop Until GetForegroundWindow() = hWndSource 'warten, bis fenster geöffnet ist TastenSim("ctrl+a") 'alles markieren With swpos.rcNormalPosition SetCursorPos(.left + 20, .top + 100) 'cursor auf markierten text setzen End With Sleep 100 'warten, bis cursor auf position ist 'Sleep 1000 'markierte dateien mit der maus aufnehmen und auf zielfenster ziehen ip.itype = INPUT_MOUSE With ip.mi .mouseData = 1 'linke maustaste wird gedrückt oder losgelassen .dwFlags = MOUSEEVENTF_LEFTDOWN 'linke maustaste drücken SendInput(1,Cast(LPINPUT,@ip),SizeOf(ip)) 'Sleep 1000 With dwpos.rcNormalPosition SetCursorPos(.left + (.right - .left) / 2, .top + (.bottom - .top) / 2) 'cursor auf mitte des zielfensters setzen End With Sleep 100 'warten, bis cursor auf position ist 'Sleep 1000 ShowWindow(hWndDest,SW_RESTORE) 'zielfenster sichtbar machen Do SetForegroundWindow(hWndDest) 'zielfenster in den vordergrund holen Sleep 100 Loop Until GetForegroundWindow() = hWndDest 'warten, bis fenster geöffnet ist 'Sleep 1000 .dwFlags = MOUSEEVENTF_LEFTUP 'linke maustaste loslassen SendInput(1,Cast(LPINPUT,@ip),SizeOf(ip)) End With Sleep End Sub TastenSim(taste As String = "") Dim As IINPUT ip Dim As String ut Dim As UByte ta ta = Asc(UCase(Right(taste,1))) 'taste als großbuchstabe If Len(taste) > 1 Then ut = LCase(Left(taste,InStr(taste, Any " +") - 1)) 'umschalttaste isolieren Else ut = "" 'keine umschalttaste EndIf ip.itype = INPUT_KEYBOARD With ip.ki .wScan = 0 .dwFlags = 0 If ut <> "" Then Select Case ut 'umschalttaste drücken Case "shift" .wVk = VK_SHIFT Case "alt" .wVk = VK_MENU Case "altgr" .wVk = VK_RMENU Case "ctrl" .wVk = VK_CONTROL End Select SendInput(1,Cast(LPINPUT,@ip),SizeOf(ip)) EndIf .wVk = ta SendInput(1,Cast(LPINPUT,@ip),SizeOf(ip)) 'taste drücken .dwFlags = KEYEVENTF_KEYUP SendInput(1,Cast(LPINPUT,@ip),SizeOf(ip)) 'taste loslassen If ut <> "" Then Select Case ut 'umschalttaste loslassen Case "shift" .wVk = VK_SHIFT Case "alt" .wVk = VK_MENU Case "altgr" .wVk = VK_RMENU Case "ctrl" .wVk = VK_CONTROL End Select SendInput(1,Cast(LPINPUT,@ip),SizeOf(ip)) EndIf End With End Sub