• 締切済み

アニメーションカーソルへの変更

VB2005,WindowsXPproの環境で開発を行っております。 ある特定の操作を行った場合にカーソルをアニメーションカーソルに 変更したいのですが、うまくいっていません。 .net frameworkのcursorクラスはアニメーションカーソルを サポートしてないとのことなので、Win32APIを利用しています。 Declare Function LoadCursorFromFile Lib "user32.dll" Alias "LoadCursorFromFileA" (ByVal lpFileName As String) As Integer Declare Function SetSystemCursor Lib "user32.dll" (ByVal hCursor As Integer, ByVal uId As Integer) As Integer Const IDC_ARROW As Integer = 32512 hCursor = LoadCursorFromFile("アニメーションカーソルファイル") SetSystemCursor(hCursor, IDC_ARROW) 上記のコードでアニメーションカーソルへの変更は できたのですが、元に戻すことができません。 どなたか、お知恵を拝借ください。 よろしくお願いします。

みんなの回答

  • stiffels
  • ベストアンサー率34% (25/72)
回答No.1

Call SetSystemCursor(LoadCursor(0, IDC_ARROW), IDC_ARROW) などとして元にもどせないでしょうか?

ronaldo9
質問者

お礼

回答ありがとうございます。 試してみたのですが、LoadCursorでおかしくなります。 GetLastError関数で調べたところ、 指定されたリソースの種類がイメージ ファイルに見つかりません。(Code:00001813) とのことでした。 IDC_ARROWがなくなってしまっているのでしょうか。

関連するQ&A

  • [excel vba] マウスポインタの変更

    お世話になります。 excel vba でマウスポインタの変更を教えてほしいのですが、「Application.Cursor」で使用可能な  ・xlDefault  ・xlNorthwestArrow  ・xlIBeam   ・xlWait 以上の4つではなく、クロス型(+のような形)のポインタに変更することはできないでしょうか? 図形をコピー⇒貼り付けするタイミングでこのマウスポインタ型に変更できたらと思っています。 windowsAPIを使用した下記の方法では、一時的には可能ですが、マウスポインタを動かすと元に戻ってしまいます。 書き方、使用方法など間違っているのでしょうか。 -----winAPIを使用したソース--------------------------------------------------------- Private Declare Function LoadCursor Lib "user32" Alias "LoadCursorA" (ByVal hInstance As Long, ByVal lpCursorName As Long) As Long Private Declare Function SetCursor Lib "user32" (ByVal hCursor As Long) As Long Private Const IDC_CROSS = 32515& Sub CursorChangeTest() Dim i As Double Dim waitTime As Variant SetCursor (LoadCursor(0, IDC_CROSS)) 'ループ処理 For i = 1 To 5 waitTime = Now + TimeValue("0:00:01") Debug.Print "きました " & i Application.Wait waitTime Next i End Sub ------------------------------------------------------------------------------------ よろしくお願いします。

  • VBAでのカーソル移動とマウスクリック

    業務上の単純作業の自動化のため、VBAから他のアプリケーションを操作することが目的です。 以前、ブラウザ上での作業の時に使用した、下記2つのAPIでは今回はマウスカーソルが指定した座標に動いてくれません、、、 Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal Y As Long) As Long Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long) この2つのAPI以外で、カーソル移動とマウスクリックを実現する方法は何かありますでしょうか? 色々な方法を教えていただけるとVBAの勉強にもなり幸いです。 ' // 標準モジュール Option Explicit Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal Y As Long) As Long Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long) Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long) Private Type POINTAPI     x As Long     y As Long End Type Private Sub クリックテスト() Call SetCursorPos(216, 421) Sleep 400 Call mouse_event(&H2, 0, 0, 0, 0) Call mouse_event(&H4, 0, 0, 0, 0) End Sub

  • マウス関連のAPIについて

    マウスがどのフォーム(自分のフォームでないときも)でも左クリックしたときの状態の取得方法を教えてください。 Public Declare Function SetCursorPos& Lib "user32" (ByVal x As Integer, ByVal y As Integer) Public Declare Function GetCursorPos& Lib "user32" (ByRef lpPoint As POINTAPI) で、マウスの位置の取得設定はわかりました。

  • カーソルを手に変更

    スタティックウインド上でカーソルを手にしているところなんだけど カーソルが手になるはずが透明になっています。 その他はうまく行っているから、スタティックウインドの外に出ると カーソルは矢印に戻ります。 ソースを直してください。 #include <windows.h> HINSTANCE hInstanceForCursor; ~ WinMain() で  wc.hInstance = hInstance;  hInstanceForCursor = hInstance; ~ WndProc()  case 101:   if(ChildWindowFromPoint(hWnd, pt) == hSWnd){    hCursor = LoadCursor(hInstanceForCursor, IDC_HAND);    SetCursor(hCursor);   }else SetCursor((HCURSOR)IDC_ARROW);  break;

  • VBAでDLLが見つからないエラー

    CADのVBA(6.0)ですが、DLLが見つからないエラーが出ます ' こっちはエラーが出ない Public Declare Function SearchVBApath Lib _ "C:\Program Files\AppliTool\VB\DDDD.dll" (ByVal env As String, ByVal s As String) As Integer 'こっちだとエラーが出る Public Declare Function SearchVBApath Lib "DDDD.dll" (ByVal env As String, ByVal s As String)    As Integer VBAプロジェクトファイルとDLLは同じフォルダにおいてあります 上記のようにフルパスだとエラーが出ないのですがDLL名だけだとこの関数のところでエラーがでます このDLL関数宣言行の前の方には他のDLL関数も同じようにパス省略で記述しているのですがそちらにはエラーが出ません どなたかヒント下さい、よろしくお願いします。

  • EXCELVBA フォルダ検索API

    エクセルからVBAでフォルダを選択させるコマンドを、APIを使ってフォルダ検索ダイアログボックスを出すまでは見よう見真似でできるのですが、このとき「あたらしいフォルダ」のボタンは必要ないので出したくないのですが、どこかに定数を指定すればよろしいかご存知でしたら教えてください。 (使用OS: Windows2000,Excel:2003) ちなみにコピペした宣言部分は以下のものです。 *************** Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" _ (ByVal pidl As Long, ByVal pszPath As String) As Long Declare Function SHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" _ (lpBrowseInfo As BROWSEINFO) As Long Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal pv As Long) Declare Function SendMessage Lib "user32" Alias "SendMessageA" _ (ByVal hwnd As Long, ByVal wMsg As Long, _ ByVal wParam As Long, lParam As Any) As Long Public Const WM_USER = &H400 Public Const BFFM_SETSELECTIONA = (WM_USER + 102) Public Const BFFM_INITIALIZED = 1 ********************

  • VB.net キャレットの幅の変更をしたい

    OS:Windows 7 64bit 開発環境:Visual Studio 2013 Express リッチテキストボックスでキャレットの幅を変更したいのですが、うまくいきません。 ------------------------------------------------------------- 'キャレットを作成する Private Declare Function CreateCaret Lib "user32" _ (ByVal hWnd As IntPtr, _ ByVal hBitmap As IntPtr, _ ByVal nWidth As Integer, _ ByVal nHeight As Integer _ ) As Boolean 'キャレットを表示する Private Declare Function ShowCaret Lib "user32" _ (ByVal hWnd As IntPtr) As Boolean Private Sub RichTextBox1_Enter(sender As Object, e As EventArgs) Handles RichTextBox1.Enter 'CreateCaret(RichTextBox1.Handle, IntPtr.Zero, 7, 15) CreateSolidCaret(5, 10) ShowCaret(RichTextBox1.Handle) End Sub ------------------------------------------------------------- 以上のようにして RichTextBox1 にフォーカスが来た時にキャレットの幅を変えるようにしているのですが、一度だけフォーカスが来た時にほんの一瞬だけ四角いキャレットが見えるのですが、すぐにI型に戻ってしまいます。 ググっても上記ソースくらいしか見つかりませんでした。 どなたかご享受願えませんでしょうか? よろしくお願い致します。

  • SendMessageによるチェックボックスの状態取得

    はじめまして、VB.NET2005でチェックボックスの状態の取得、設定をうまく設定できません。OSはxpです。 Public Class Form1 Private Declare Function FindWindow Lib "user32" Alias "FindWindowA"  (ByVal lpClassName As String, _ ByVal lpWindowName As String) As Integer Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Integer, _ ByVal hWnd2 As Integer, ByVal lpsz1 As String, ByVal lpsz2 As String) As Integer Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Integer, _ ByVal wMsg As Integer, ByVal wParam As Integer, ByVal iParam As String) As Integer Private Declare Function SendMessageint Lib "user32" Alias "SendMessageA" (ByVal hwnd As Integer, _ ByVal wMsg As Integer, ByVal wParam As Integer, ByVal iParam As Integer) As Integer Const BM_GETCHECK = &HF0 Const BM_GETSTATE = &HF2 Const BM_SETCHECK = &HF1 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim hWindows As Integer Dim ipEDIT As Integer Dim i As Integer hWindows = FindWindow(vbNullString, "Form1") '198458 ipEDIT = FindWindowEx(hWindows, 0, vbNullString, "CheckBox1") MessageBox.Show(ipEDIT) i = SendMessageint(ipEDIT, BM_GETCHECK, 0, 0) 'SendMessageint(ipEDIT, BM_SETCHECK, 1, 0) MessageBox.Show(i) End Sub End Class のようなコードなのですが、 ハンドルは取得できているのですが、 SendMessageの戻り値は0になります。 勿論、コメントのチェックをセットも出来ません。 ご教授のほど宜しくお願いします。

  • VB2003で レジストリを格納する

    レジストリを格納するために、以下のように宣言し、 Private Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Integer, ByVal lpSubKey As String, ByVal Reserved As Integer, ByVal lpClass As String, ByVal dwOptions As Integer, ByVal samDesired As Integer, ByRef lpSecurityAttributes As SECURITY_ATTRIBUTES, ByRef phkResult As Integer, ByRef lpdwDisposition As Integer) As Integer Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Integer, ByVal lpValueName As String, ByVal Reserved As Integer, ByVal dwType As Integer, ByRef lpData As String, ByVal cbData As Integer) As Integer Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Integer) As Integer 以下のようなコードで、ユーザーエージェントをmozillaからoperaへ(またはoperaからmozilla)書き換えようとしていますが、うまくいきません。 問題点1.同じuser agentの下に”(既定)”が2つできてしまう 問題点2.データが正しく(operaと)書き込まれず、文字化けしたものが書き込まれている。 C言語用のサンプルやVB6.0のサンプルは見ますが、VB2003ではどのように指定するのか、わかりませんでした。 Dim ret As Long Dim hKey As Long, lngDisposition As Long Dim udt As SECURITY_ATTRIBUTES Dim myroot_key As String, mysub_key_user_agent As String, myName As String,StrValue As String myroot_key = &H80000002 '"HKEY_LOCAL_MACHINE" を指定している mysub_key_user_agent ="Software\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent" myName = "(既定)" strValue="Opera" ret = RegCreateKeyEx(myroot_key, mysub_key_user_agent, 0&, vbNullString, _ 0, &H4 Or &H2, udt, hKey, lngDisposition) If ret = 0 Then ret = RegSetValueEx(hKey, myName, 0, 1, strValue, Len(strValue) + 1) RegCloseKey(hKey)

  • VBでBtrieveファイルにアクセスする方法

    ご存知の方、教えて下さい。下記のようなサンプルまでは見つけたのですが、それぞれに何をセットすればよいのかわかりません。OPENのときとGETEQUALのときとセットする内容は違うのでしょうか。よろしくお願いします。 Declare Function BTRCALL Lib "w3btrv7.dll" ( _ ByVal Operation As Integer, _ Posblock As Byte, _ Databuffer As Any, _ Databuflen As Long, _ Keybuffer As Any, _ ByVal Keybuflen As Integer, _ ByVal Keynum As Integer _ ) As Integer

専門家に質問してみよう