2011-12-30 14 views
0

ショート質問
はそれがuser32.dllを使用して、選択したアプリケーション(Visioの2010)のためのシステムカーソルを変更することは可能ですか?VBAは、カーソルの変更をuser32.dllの呼び出し

背景
私は矢印としてだけショーにカーソルを強制しようとする、またはより良いまだ、私のVisioのアプリケーションは、常にそれをします「待って」されたときになるように、矢印ポインタに「砂時計」のポインタを再マッピングしています矢印を表示します。これまで私はuser32.dllをロードし、SetSystemCursorLoadCursorA、およびShowCursorと呼ぶことができました。行われたすべてのコールのうち、ShowCursorだけが期待通りに動作します。

LoadCursorSetSystemCursorが実際に行うことを完全に理解していない可能性があります。私は見つけることができる最良の文書をリンクしていますが、IMOには欠けています。

の考えを閉じる
user32.dll APIを使用するよりも、これをむしろ達成するためのより良い方法はありますか? Visio 2010では、マウスポインタを制御することはできません。正確な動作のための

フォローアップ
チェックアウトthis post私は周りを取得しようとしています。私はそれがビジーであることをアプリケーションから隠すことを試みていないことに注意してください。 Visioのシェイプデータをプログラムで変更するたびに、砂時計がちらつくのを避けようとしています。 Hereは、VisioGuyポストで言及したVisioの例へのリンクです。添付ファイルを表示するには、サイトのメンバでなければなりません。

元々、LoadCursorSetSystemCursorを使用するつもりはなく、私はPinvoke.net(SetSystemCursor)のドキュメントのためにのみ関連付けを行っていました。私はSetSystemCursorのMSDNのマニュアルを見ていませんでした。 Pinvokeのヒントをお寄せいただきありがとうございます...私はなぜ両方のMSDNをプルアップしなかったのか分かりません。

確かに、私はずっとシステムDLLで遊んだことはありません。私の主な知識ベースは組込みシステムとOSに依存しない言語(つまりPython)ですので、グローバルシステムエラーの原因となるSetSystemCursorに関するヒントは、私が本当に必要とする情報の種類です。

+0

Visioはいつでもカーソルを変更できます。カーソルが砂時計に変更されたときに認識してから、ポインタにリセットする必要があります。これは実用的ではありません、それは忙しい時に砂時計に変わるので、変更カーソルマクロを実行できません。 –

+0

@MattH:私は、変化を監視することが現実的ではないことに同意します。Visioで矢印キーを使用して砂時計のガラスのデカールを何らかの方法で再マップすることができます。私が取り組もうとしている正確な問題を見るために私の編集をチェックしてください。 –

+1

私はあなたが 'LoadCursor'と' SetSystemCursor'を言及しているのを見ます - 私はあなたが後者のための[docs]を読んだと仮定します(http://msdn.microsoft.com/en-us/library/windows/desktop/ms648395)。 (v = vs.85).aspx): "* hcur *は、LoadCursor関数を使用してロードされたカーソルにできません。" –

答えて

0

それは厳密に「カーソルの変更」の質問に答えていませんが、私はあなたがVisioののApplicationオブジェクトのプロパティを使用することができるはずだと思う:

少なくとも、これにより、バックグラウンド処理中にカーソルを隠すことができます。私はvisguy上のサンプルでこれをテストしましたが、それはもはや痛みのないカーソルの変化を示していません。

+0

リンクをありがとう。唯一の問題は、バックグラウンドタスクが進行中であることです。 COMを介してVisioを制御しているPythonソケットサーバーで、任意の時点で図を更新できます。これらの変更は、一般的には短いものの、時には長くなることがあります。ちょっと見ると、元々考えていた以上に助けになると思います。ありがとう! –

関連する問題