Option Compare Database Option Explicit Const WM_CHAR = &H102 Const BM_CLICK = &HF5 Const SW_HIDE = 0 Const SW_SHOW = 5 Const WM_SETTEXT = &HC Declare PtrSafe Function FindWindow Lib "user32" _ Alias "FindWindowA" ( _ ByVal lpClassName As String, _ ByVal lpWindowName As String _ ) As LongPtr Declare PtrSafe Function FindWindowEx Lib "user32" _ Alias "FindWindowExA" ( _ ByVal hWnd1 As LongPtr, _ ByVal hWnd2 As LongPtr, _ ByVal lpsz1 As String, _ ByVal lpsz2 As String _ ) As LongPtr Declare PtrSafe Function PostMessage Lib "user32" _ Alias "PostMessageA" ( _ ByVal hwnd As LongPtr, _ ByVal wMsg As Long, _ ByVal wParam As LongPtr, _ ByVal lParam As LongPtr _ ) As Long Declare PtrSafe Function ShowWindow Lib "user32" _ (ByVal hwnd As LongPtr, _ ByVal nCmdShow As Long _ ) As Long Declare PtrSafe Function SendMessage Lib "user32" _ Alias "SendMessageA" ( _ ByVal hwnd As LongPtr, _ ByVal wMsg As Long, _ ByVal wParam As LongPtr, _ lParam As Any _ ) As LongPtr 'ShellExecute 'http://msdn.microsoft.com/ja-jp/library/cc422072.aspx Declare PtrSafe Function ShellExecute Lib "shell32.dll" _ Alias "ShellExecuteA" ( _ ByVal hwnd As LongPtr, _ ByVal lpOperation As String, _ ByVal lpFile As String, _ ByVal lpParameters As String, _ ByVal lpDirectory As String, _ ByVal nShowCmd As Long _ ) As LongPtr Sub OpenaccdrWithPassword() Dim pHwnd As LongPtr, cHwnd As LongPtr, btnHwnd As LongPtr Dim rtnShellExe As LongPtr Dim targetDBName As String Dim targetDBFullName As String Dim dialogName As String Dim strDBPassword As String strDBPassword = "p@ssw0rd" dialogName = "データベース パスワードの入力" targetDBName = "target" targetDBFullName = Application.CurrentProject.Path & "\target.accdr" pHwnd = FindWindow(vbNullString, targetDBName) If pHwnd <> 0 Then Exit Sub pHwnd = FindWindow(vbNullString, dialogName) If pHwnd <> 0 Then Exit Sub rtnShellExe = ShellExecute(0, "open", targetDBFullName, _ vbNullString, vbNullString, SW_SHOW) If rtnShellExe <= 32 Then Exit Sub Do 'カウンタつけて何かの時に対処せねばね pHwnd = FindWindow(vbNullString, dialogName) ' Debug.Print pHwnd If pHwnd <> 0 Then Exit Do Loop ShowWindow pHwnd, SW_HIDE Do cHwnd = FindWindowEx(pHwnd, 0, "RichEdit20W", vbNullString) ' Debug.Print cHwnd If cHwnd <> 0 Then Exit Do Loop Do btnHwnd = FindWindowEx(pHwnd, 0, "button", "OK") ' Debug.Print btnHwnd If btnHwnd <> 0 Then Exit Do Loop SendMessage cHwnd, WM_SETTEXT, 0, ByVal strDBPassword PostMessage btnHwnd, BM_CLICK, 0, 0 Application.Quit End Sub
2010/11/21
office2010 Win32API ShellExecute
ラベル:
access 2010,
API,
Office 2010,
VBA
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿