NonSoft ...

Win32Apiで色々試してみるサンプル(VB6)
1765731

...
 サイト内リンク
フォルダ監視人はファイル更新時にメール等で通知(本文/差分/添付)、プログラム実行(新/旧/差分指定)、フォルダ同期するFTP対応のツール。
WEB自動入力ツール(WebFormInput)はWEBフォームに入力したデータを保存し次回以降は自動入力するツール。毎日のWEBログインが簡単になります。
PC状況メール通知(PcEvMail)はパソコンの起動、シャットダウン、ログイン、ログアウト時にメール通知するツール。PCの使用状況チェックに役立ちます。
サイト内URLチェックはサイト内の全てのリンク(URL)の一覧表示、リンク切れチェック、WEBページ保存、サイトマップ作成をするツール。
  トップページ   ツール/DLL   サンプルソース   ち~な~み~に~   おすすめソフト     
  ファイル監視関係   ファイル比較関係   文字コード変換関係   通信(RS232C等)関係   ブラウザ操作関係   WEB/SEO関係   お問い合わせ  
 サンプル(ソース/コード)
<このサンプルの概要>
以下のWin32Apiを使用したサンプルソースです。
(1)GetLastError
(2)GetPrivateProfileString
(3)RegOpenKeyEx
(4)RegCloseKey
(5)RegQueryValueEx
(6)SetPrivateProfileString(WritePrivateProfileString)
(7)SetComputerName
(8)SHFileOperation
(9)Sleep
(10)GetWindowThreadProcessId
(11)FindWindow
(12)GetWindow
(13)GetParent

VB.NETでApiを宣言(Declare)する場合はVB.NET用に変換する必要があります。
変換方法のサンプルはこちらです。VB6とVB.NETのAPI宣言(Declare)の違いを比較したサンプル

C#.NETでApiを宣言(Declare)する場合はC#.NET用に変換する必要があります。
変換方法のサンプルはこちらです。VB6とC#.NETのAPI宣言(Declare)の違いを比較したサンプル

その他のサンプルソースはこちらです。
Win32Api定義のサンプル サンプルソース

★GetWindowThreadProcessId / FindWindow / GetWindow / GetParent
Private Const GW_HWNDNEXT = 2
Private Declare Function GetParent Lib "user32" _
    (ByVal hwnd As Long) As Long
Private Declare Function GetWindow Lib "user32" _
    (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
    (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" _
    (ByVal hwnd As Long, ByRef lpdwprocessid As Long) As Long
Private Declare Function IsWindowVisible Lib "user32" _
    (ByVal hwnd As Long) As Long

' プロセスID(pid)をウィンドウハンドル(hwnd)に変換する
Public Function GetHwndFromPid(ByVal pid As Long) As Long
    Dim hwnd As Long
    hwnd = FindWindow(vbNullString, vbNullString)
    Do Until hwnd = 0
        If GetParent(hwnd) = 0 And IsWindowVisible(hwnd) <> 0 Then
            If pid = GetPidFromHwnd(hwnd) Then
                GetHwndFromPid = hwnd
                Exit Do
            End If
        End If
        hwnd = GetWindow(hwnd, GW_HWNDNEXT)
    Loop
End Function

' ウィンドウハンドル(hwnd)をプロセスID(pid)に変換する
Public Function GetPidFromHwnd(ByVal hwnd As Long) As Long
    Dim pid As Long
    Call GetWindowThreadProcessId(hwnd, pid)
    GetPidFromHwnd = pid
End Function

★RegOpenKeyEx / RegCloseKey / RegQueryValueEx
' レジストリ関係API
Private Const HKEY_CLASSES_ROOT = &H80000000
Private Const HKEY_CURRENT_USER = &H80000001
Private Const KEY_ALL_ACCESS = &HF003F
Private Declare Function RegOpenKeyEx Lib "advapi32" Alias "RegOpenKeyExA" _
    (ByVal hkey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, _
     ByVal samDesired As Long, phkResult As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32" (ByVal hkey As Long) As Long
Private Declare Function RegQueryValueEx Lib "advapi32" Alias "RegQueryValueExA" _
    (ByVal hkey As Long, ByVal lpszValueName As String, ByVal dwReserved As Long, _
     lpdwType As Long, lpbData As Any, cbData As Long) As Long

Dim strCmd As String: strCmd = ""
Dim lngBuf As Long: lngBuf = 511
Dim strBuf As String: strBuf = String(lngBuf + 1, Chr(0))
Dim ret   As Long
Dim key   As Long
Dim dtp   As Long

' レジストリKEYオープン(テキストエディタのパス)
ret = RegOpenKeyEx(HKEY_CLASSES_ROOT, _
    "txtfile\shell\open\command", 0, KEY_ALL_ACCESS, key)
If (ret = 0) Then
    ' レジストリVALUE取得
    ret = RegQueryValueEx(key, "", 0, dtp, ByVal strBuf, lngBuf)
    strCmd = Left$(strBuf, InStr(strBuf, Chr$(0)) - 1)
    ' レジストリKEYクローズ
    ret = RegCloseKey(key)
End If
' レジストリから取得したデータのデバック表示
Debug.Print strCmd

★GetPrivateProfileString / SetPrivateProfileString(WritePrivateProfileString)
' iniファイル読み込み/書き込みAPI
Private Declare Function GetPrivateProfileString Lib "kernel32.dll" Alias _
    "GetPrivateProfileStringA" (ByVal lpSectName As String, ByVal lpKeyName As Any, _
    ByVal lpDefault As String, ByVal lpReturnedString As String, _
    ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare Function SetPrivateProfileString Lib "kernel32.dll" Alias _
    "WritePrivateProfileStringA" (ByVal lpSection As String, ByVal lpKeyName As String, _
    ByVal lpValue As String, ByVal lpFileName As String) As Long

' iniファイル書き込み
SetPrivateProfileString "TEST_SECTION", "TEST_KEY", "test_value2", "d:\temp\test.ini"
    
' iniファイル読み込み
Dim strBuf As String * 1024
Dim lngLen As Long
lngLen = GetPrivateProfileString( _
    "TEST_SECTION", "TEST_KEY", "test_default", strBuf, 1024, "d:\temp\test.ini")

' iniファイル読み込み値のデバック表示
Debug.Print "[" & StrConv(LeftB$(StrConv(strBuf, vbFromUnicode), lngLen), vbUnicode) & "]"

★SetComputerName / GetLastError
Declare Function SetComputerName Lib "kernel32" Alias "SetComputerNameA" _
    (ByVal lpComputerName As String) As Long
Declare Function GetLastError Lib "kernel32" () As Long
Public Sub SampleModule()
    Dim lngRet As Long
    ' NetBiosコンピュータ名が変更された
    ' (注)システムのプロパティのコンピュータ名は変更されなかった(なぜ?)
    lngRet = SetComputerName("TESTCOMNAME")
    If lngRet = 0 Then
	' エラー番号を取得する
        MsgBox GetLastError()
    End If
End Sub

★Sleep
' 画面が固まらないスリープ
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Sub SampleModule(ByVal mSec As Long)
    Dim i As Long
    For i = 0 To mSec - 1 Step 100
        Sleep 100
        DoEvents
    Next i
End Sub

★SHFileOperation
' ゴミ箱へ移動するサンプル
Public Type SHFILEOPSTRUCT
    hWnd As Long
    wFunc As Long
    pFrom As String
    pTo As String
    fFlags As Integer
    fAnyOperationsAborted As Boolean
    hNameMappings As Long
    lpszProgressTitle As String
End Type
Public Declare Function SHFileOperation Lib "shell32" Alias "SHFileOperationA" _
    (lpFileOp As SHFILEOPSTRUCT) As Long
Private Const FO_DELETE = &H3&              ' 削除
Private Const FOF_ALLOWUNDO = &H40&         ' ごみ箱へ
Private Const FOF_NOCONFIRMATION = &H10&    ' 確認ダイアログを表示しなし
Private Const FOF_NOERRORUI = &H400&        ' エラーダイアログを表示しない

Public Function RecyclerDelete(myForm As Form, fileName As String) As Long
    Dim SFOP As SHFILEOPSTRUCT
    SFOP.pFrom = fileName
    SFOP.hWnd = myForm.hWnd
    SFOP.wFunc = FO_DELETE
    SFOP.fFlags = FOF_ALLOWUNDO + FOF_NOERRORUI + FOF_NOCONFIRMATION
    RecyclerDelete = SHFileOperation(SFOP)
End Function
 オリジナル便利ツール
WEB自動入力ツール
WEBフォームに入力したデータを保存し次回以降は自動入力。WEBページのログイン入力に。

WEB操作再生ツール
WEBページの入力操作やクリック操作を記録/再生、コマ送り再生、ショートカットからの再生

WEB更新通知ツール
WEBページの更新をチェックし通知(ブザー/アイコン点滅/バルーン表示)、変更内容の差分表示

指令メール実行
メールで遠隔操作(受信メールを監視しメールタイトルのキーワードに対応したファイルを実行)

フォルダ監視人
ファイル更新監視:メール等通知(本文/差分/添付) プログラム実行(新/旧/差分指定) 同期 FTP対応

PC状況メール通知
PC使用状況通知(PC起動/PC終了/ログイン/ログアウト/指定ファイル更新時にログ出力/メール送信)

フォルダ内のファイル比較ツール
サブフォルダを含む全ファイル比較 文字コード判定比較 フォルダ同期 FTP対応 バッチ対応

テキスト差分解析DLL
テキスト差分を解析するライブラリ、差分解析するテキストの文字コード判定

文字コード判定/変換DLL
文字コード変換、文字コード判定(SJIS/JIS/EUC/UNICODE/UTF7/UTF8/バイナリ)ライブラリ

TCP/IP-RS232C中継機
TCP/IPとRS232Cのプロトコル変換、送受信電文のログ表示/保存、タスクトレイ動作可 RS232C共有

まだまだ沢山あります

...
...