1 :
デフォルトの名無しさん :
2010/03/28(日) 10:23:58
999 名前:デフォルトの名無しさん[sage] 投稿日:2010/03/28(日) 10:19:24 hoge((bool)0,(HANDLE)0) みたいなことはしてもいいと思う HANDLEってvoid*だぞ キャストする意味がない
あ、ごめん ソースコードの解読のしやすさの話ね
ダイアログボックス呼び出しCreateDialog、リソーススクリプトに内容を記述、ダイアログ表示。 ウインドウ名や内容に ”文字” では無く、Char変数の内容を表示させたいのですができますかね?
日本語でおk
SetWindowText WM_SETTEXT
10 :
7 :2010/03/28(日) 14:05:42
>>9 できました、ありがとうございます。
ダイアログボックス自体は変数の表示はできないって事なんですね。
GdiplusのGraphics::Clearに矩形でクリッピングしたいんですが、何か方法ないですか? Clearの直前にSetClipしても反映されませんでした。
とあるプラグイン(DLL)をロードした際、 そのプラグインは特定の条件化(バージョンチェックなど)で 不整合が発生した場合、自らをアンロードしたいのですが、 何か良いやり方はありませんか? あるのであれば教えて頂きたいです。
>>14 DLLをアンロードするAPIはFreeLibraryがあるが
DLLが自分自身をアンロードするのは普通にはできないと思う。
dllmainでFALSEを返す
17 :
14 :2010/03/30(火) 01:34:37
>>16 それができない状況です。
>>15 自分自身をアンロードはやはりできないですか。。
ExitProcess()しちゃうとプロセス自身が落ちてしまいますよね・・
フラグか何か持って処理をさせないという微妙な方式を採用するしかないのかな。
とりあえずもう少し意見があるかも知れないのでしばらく待ってみます。
>>17 ロードする方のプロセスに手を入れられるなら、
そっちでアンロードするように実装すべき。
TeminateProcessが実行された後って、普通はシステムがリソース全て開放することが保証されているよね? でも、通知領域にアイコン持つプロセスにそれを実行したとき、通知領域のアイコンが表示されたままになる。 これはアイコンリソースが開放されてないからじゃないの?
はい
21 :
デフォルトの名無しさん :2010/03/30(火) 07:17:30
CPU名を簡単に取得する方法を教えてください
>>19 通知領域はexplorer.exeのプロセス内だ
>>14 FreeLibraryAndExitThread
スレッドなのね
737 名前:デフォルトの名無しさん[] 投稿日:2010/03/19(金) 15:40:38
CPU名を取得するにはどうしたらよいのでしょうか?
738 名前:デフォルトの名無しさん[sage] 投稿日:2010/03/19(金) 15:41:47
>>737 WMI使うのが簡単。
739 名前:デフォルトの名無しさん[] 投稿日:2010/03/19(金) 16:18:58
めんどくせーから、ソース晒してくれ
740 名前:デフォルトの名無しさん[] 投稿日:2010/03/19(金) 16:29:46
>>738 簡単なサンプルを教えていただけないでしょうか?
741 名前:デフォルトの名無しさん[sage] 投稿日:2010/03/19(金) 16:31:24
とりあえずおぱいうp
>>21 プロンプト出してユーザー自身に使ってるCPU名を入れさせろ
>>21 mov eax,80000002h;...80000004h
cpuid
char name[49]; unsigned char index; int reg[4]; for(index = 0, num = 0x80000002L; num <= 0x80000004L; index += 4, num++) { __cpuid(reg,num); memcpy(&name[index],reg,sizeof(int) * 4); } name[48] = '\0'; printf(_T("%hs\n"),name);
最後の間違えた s/printf/_tprintf/
numの宣言も忘れたがもういいや
例えば LARGE_INTEGER liX = 0; ではなく、 LARGE_INTEGER liX = { 0 }; とするのは、なぜなんでしょうか? LARGE_INTEGERが共用体だからですか?
LARGE_INTEGER共用体の最初の要素が構造体だから
35 :
デフォルトの名無しさん :2010/04/01(木) 16:44:10
vc++9.0でのお話なのですが、 ZeroMemory()という関数は純粋なWindowsAPIではないという認識でよろしいでしょうか? 宣言をたどっていくと…RtlZeroMemory(WinNT.h)→memset(String.h)になってるので… CRT依存したくない場合は、自作するのがベターって事ですかね。
kernel32.dllにはRtlZeroMemoryがありkernel32.libには__imp__RtlZeroMemory@8があるので宣言さえすれば使える #undefしてもよいしマクロ展開させないためにスペースをあけてもよい RtlZeroMemory (
37 :
デフォルトの名無しさん :2010/04/01(木) 17:42:13
>>36 ありがとうございます。スッキリしました!
SecureZeroMemoryとかなんとか
SecureZeroMemoryは高速化版がある
exe や dll が .NET マネージコード化案マネージコード化を判別する方法ありますか?
定義次第。
確実ではないが一般に mscoreee.dll:_CorDllMain,_CorExeMain系関数をインポートしていればマネージドコードを含む さらにその他のdllもインポートしている場合マネージド/アンマネージド混在の可能性が高い 何もインポートしていないならマネージド/アンマネージドに無関係なデータ/リソースモジュールの可能性が高い それ以外の場合はアンマネージドモジュールの可能性が高い COM参照など間接的な物はほぼ判定不能
んー、そうですか。 ちょっとがんばってみます。 マネージドコードで判断するときは リフレクション使ってファイル読んだときに アンマネージドであれば例外を出してくれる陽南でかんたんにわかるようなんですけどね。
ngenが.netアセンブリの判定やってるから参考にしてみれば しらんけど
フックDLLを書いてるときにふと気になったけど 共有セクションってどこまで適用されるの?ウィンドウステーション?
あるプロセスが開いてるファイルハンドルを取得して、強制的にクローズするにはどうすればいいの?
質問です。IDE(VC++2008 Express)固有の話なのですが、 とあるクラスを作成後、動作確認中、作成した自作クラスのコンストラクタ内の処理の途中で ブレイクポイントを仕掛けたのですが、どうもブレイクしてくれません。 ※正確には、コンストラクタと、publicメンバ関数の2箇所にブレイクポイントをしかけました。 しかしコンストラクタのブレイクポイントは無視され、publicメンバの方だけで止まります。 これは仕様なんでしょうか。ご存知の方いらっしゃいましたらよろしくお願いいたします。
おい 殺されたいのかお前は スレタイ100回声に出して読め
まぁまぁ
Win32APIじゃ無いかもしれないけど、現在接続しているUSBカメラの焦点距離を知る方法 ってありませんか?
はい
あります
この辺かな WIA_DPC_FOCUS_DISTANCE/WIA_DPC_FOCAL_LENGTH
55 :
デフォルトの名無しさん :2010/04/05(月) 14:30:07
DOSコマンドのroute printで表示される情報と同じものを取得するAPIを教えてください
ありません
57 :
デフォルトの名無しさん :2010/04/05(月) 15:09:28
知らないならレスしないで下さい。ウザいだけです。。。
58 :
デフォルトの名無しさん :2010/04/05(月) 15:20:51
煽っても何も出て来ませんよ
scanfで数字を複数受け取るにはどうするの?
62 :
デフォルトの名無しさん :2010/04/05(月) 15:53:29
>>58 でてきましたよどじ
>>59 ありがとうございますありがとうございます。
あなたは神です。こんな糞まみれのスレで初めてみた神です。
知らないならレスしないで下さい。ウザいだけです。。。
コンソールプログラムとDOSプログラムを混同するな
65 :
デフォルトの名無しさん :2010/04/05(月) 16:00:05
うるさいブタ共だなあ
67 :
デフォルトの名無しさん :2010/04/05(月) 16:59:17
>>66 いや参考になった。
へるぱAPIで取得できました。
しかし、しかし。
Presistent Routesだけ欲しい場合に判断に困ってます。
dwForwardProto辺りで何とか識別できそうかなっておもってたんですがダメっぽいですぅ
69 :
デフォルトの名無しさん :2010/04/05(月) 17:25:29
っていうか、GetIpForwardTableじゃUSBとかのLANで接続してないとPersistent Routesを取れないや まあ接続されてないんだからActive Routesに表示されないのは当然なんだが・・・ これPersistent Routesを取得する方法をさっさと教えてください。
最近UNC等を調べ始めたものです。
引数やDnDでファイル名を取得するとき、
ローカルのファイルだと C:\file.ext
ネットワーク上のファイルだと \\PCNAME\share\file.ext
で受け取りますよね。
UNCが説明されているあるサイトで \\PCNAME\C:\file.ext
のような表記を見かけたのですが、
(
http://e-words.jp/w/UNC.html )
このように取得する方法ってありますか?
って見てみたら管理共有じゃん。
まずは落ち着け
そこのサイトの説明は適当過ぎだな。 偶々Cドライブを「C$」という名前で共有した結果なだけだろうに。
XP VC++2008、他プロセスの指定メモリアドレスの内容を見たいのだけど そのプロセスハンドル取得してReadProcessMemory使ってもうまく表示してくれません GetLastErrorみたらERROR_ACCESS_DENIEDって出たけどOpenProcessToken等の操作で変わるものでも無いので どうすれば表示されるのか分からないので教えてください
どうすればって、普通にやればできるだろ。
単にReadableじゃないのでは
単にアドレスがおかしいとか。
・ハンドルのアクセス権の問題 ・指定アドレスの有効性の問題 ・指定アドレスのアクセス権の問題 どれかしかない
81 :
デフォルトの名無しさん :2010/04/06(火) 11:28:50
ヘルパーAPIでPersistent Routesのリスト取得や追加や削除を教えてえええええええええええ>< Active Routesに対してならできるがそれじゃ意味がないぽ><
WMIのWin32_IP4PersistedRouteTableでも使えば
アプリの実行環境がコンソールかGUIかってのはAPIとは直接関係ないだろ。 どっちでも同じAPIを呼んで同じ情報が取得できるはず。
84 :
デフォルトの名無しさん :2010/04/07(水) 16:36:08
mmsystem.hをインクルードすると大量のエラーが出てコンパイルできません。 コンパイラはicl 11.0、OSはWindows XP 64bitです。
デスクトップのディスプレイの明るさを変えるapiはありませんか?ノートPCならIOCTLのブライトネストでかえれるらしいのですが。osはxpです
VGAの色補正ならドライバをリバースエンジニアリングすれば出来ない事もないけど ディスプレイの調整は、そのインターフェースがあるなんて聞いた事無い
ある
ありがとうございます。xpにはやはりなさそうですか。助かりました。
FindNextFile() でCドライブ配下の全てのファイルをカウントするだけのプログラムを作成してみました。 PC起動時の初回と2回目以降に実行し他場合、処理速度が100倍ぐらい違うのですが、どうしてでしょうか?
Cache
WinMainでDialogBoxを呼び出してモーダルダイアログを出します。 そのモーダルダイアログのボタンを押したときモードレスダイアログを出したいのですが、 メッセージループが表面上にないので、IsDialogMessage() 関数を追加する方法が分かりません。 どうようにすればいいでしょうか?
メッセージループを追加する
94 :
92 :2010/04/08(木) 15:51:22
#include <windows.h> INT_PTR CALLBACK SubProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { switch (msg) { case WM_CLOSE: DestroyWindow(hWnd); return TRUE; } return FALSE; } INT_PTR CALLBACK MainProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { switch (msg) { case WM_INITDIALOG: CreateDialog((HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE), "SubDLG", hWnd, SubProc); return TRUE; case WM_CLOSE: EndDialog(hWnd, TRUE); return TRUE; } return FALSE; } int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hprev, LPSTR cmd, int show) { DialogBox(hInst, "MyDLG1", NULL, MainProc); return EXIT_SUCCESS; } >メッセージループを追加する どこに追加すればいいでしょう…
ダイアログプロシージャ内 それで問題があるならスレッドを起動する
96 :
92 :2010/04/08(木) 17:15:01
いやその。。。 ダイアログプロシージャ内に入ったときはDispatchMessageが呼ばれているし、 スレッド立てたらメインスレッドのメッセージは読めないと思うんですが。。。
>>96 > WinMainでDialogBoxを呼び出してモーダルダイアログを出します。
これを止めて
モードレスダイアログ MainProc側 生成 → メッセージループ (EndDialog() 呼び出しの確認だけ ちょこっと工夫)
メッセージループ内
MainProc側
何らかのトリガーで SubProc側生成
98 :
デフォルトの名無しさん :2010/04/08(木) 20:20:06
リモートのIPアドレスからコンピューター名を得る方法ありますか? 自分も相手もWindows(XP以降)です 正しくはコンピューター名じゃなくてUNC名ですが
>どこに追加すればいいでしょう… どこでもいい 君のプログラムにとって必要な場所に追加する >ダイアログプロシージャ内に入ったときはDispatchMessageが呼ばれているし、 DispatchMessageから呼ばれたプロシジャの中でDispatchMessageを呼んではいけないという規則は無い 自分でイベントループを回すとはそういうこと >スレッド立てたらメインスレッドのメッセージは読めないと思うんですが。。。 読める
100 :
92 :2010/04/08(木) 20:28:31
お陰さまで、解決しました。 WinMainのモーダルダイアログを、モードレスにし、自分でメッセージループを回すことで、 サブ側もタブストップ効くようになりました。 ありがとうございました。
メッセージループとイベントループってどっちが正しいの?
>>101 用語の話ってことなら、win32的にはメッセージループじゃね?
で、そのメッセージって何?って聞かれたなら、それは各種イベントって感じ
>98 IPアドレス→MACアドレス→マシン名 ARPとNetBIOS(NBT)とか?
イベントループなんて聞いたことないな イベントで思いつくのはイベントハンドラだな。
自己解決しました
>>105 解決したときはどうやって解決したか書いておくと
後の人のためになるよ。
2chでの「自己解決しました」だけの書き込みは99.9%赤の他人。
┌─┐ │●│ └─┤ _ ∩ ( ゚∀゚)彡 ┌─┬⊂彡 │●│ おっぱい!おっぱい! └─┘ おっぱい!おっぱい!
SetLayeredWindowAttributesでクライアント領域を透過させて そこに表示する文字もSetBkModeで透過させることができたんですが CreateFontで作成した文字列だと文字の周りにデフォルトの背景色が出てしまって 透過できないんですがどうすればいいですか
自己解決しました。
デフォルトの背景色をα値にするとか
113 :
デフォルトの名無しさん :2010/04/09(金) 09:44:12
ヘルパーAPIでPersistent Routesのリスト取得や追加や削除を教えてくださいよ
いや 何度も書かれている お前の目が節穴だっただけ 大抵の人はフィルタを通して物(この場合スレの書き込み)を見てしまう 大事なことが書かれていてもそれに気付くためには 本人がそれを受け入れるための準備が必要なんだ
>>113 お前まだそれやってたのか
まさか全部人に聞かないと書けない=コピペしか出来ない奴なのか
117 :
デフォルトの名無しさん :2010/04/09(金) 12:10:03
ソケット通信でUDPを使っているのですが そのときに、ポートを5000を使って送信する時に srcポートとdstポートが同じになってしまいます。 これをsrcは自動?割り振りでdstが指定したポート番号になる方法を教えてください。 オープンはこんな感じで行っています。 struct sockaddr_in sa; SocketHandle = ::socket( AF_INET, SOCK_DGRAM, 0 ); sa.sin_family = AF_INET; sa.sin_addr.s_addr = INADDR_ANY; sa.sin_port = ::htons( iPort ); ::bind( SocketHandle, (struct sockaddr *)&sa, sizeof( sa ) );
118 :
デフォルトの名無しさん :2010/04/09(金) 13:55:33
>>118 マルチ乙
返事がこなさそうって失礼にも程がある
まぁ来ないけどね
ahoo!知恵遅れ袋で聞くってアホとしか
122 :
118 :2010/04/09(金) 14:57:11
フック関連のは何度か質問してるんですがYahoo!知恵袋は一度も返事が来ません。 私の質問履歴にないのは全部そのまま消えていくからですorz なんでしょうかね。めんどくさいのかわからないのか。 マルチなんぞに返答をくれる方お願いします。 キーイベントが発生したときのみエラーが起きているので、フックプロシージャかなんかに問題でもありますかね? キーイベントの有無による違いはそれくらいだと思うんですが。
>>118 開発環境は?
hHookはどこでどう宣言してる?
124 :
デフォルトの名無しさん :2010/04/09(金) 16:01:20
ぐだぐだほざいてないでさっさと教えやがって下さいよ
雑魚しかいないから教えれる奴がいないんだろw
なんか数日前から騙って踊れるキチガイが1匹わいてるな
16:25:23 にも基地外が沸いてるね
ここまで俺の自演
↑ 2ちゃんの画一的なコメント 乙
別の症状だと思うがsmss.exeなど入力のないシステムプロセスにフックしたまま解除不能になった事ならある case DLL_PROCESS_ATACH: if (!GetModuleHandle("USER32.DLL") return FALSE;
>>118 WM_KEYHOOKのプロシージャでResetHookを呼んでいるんだろうけど
SendMessageしたらいかんだろ。
>117 1) bindのsin_portを0にする 2) bindやめてconnect呼ぶ。(後続するsendtoはsendに変える) 1,2の好きな方を選んだら?
WM_KEYHOOKを受け取ったウィンドウプロシージャで
何をやってるか示さないと答えようがないわけだが
まぁ
>>131 の可能性が高そうだけど
ドライブレターからフロッピードライブか否かを判別する方法はないですか? GetDriveTypeではリムーバブルって返って来るだけで、フロッピーではないかも知れませんし、 SetupDiEnumDeviceInfoとSetupDiGetDeviceRegistryPropertyでQueryDosDeviceで得た文字列と同じものを探して関連付けようと試みましたがヒットしないです...。 QueryDosDeviceでは"\Device\Floppy0"が返って来ましたが、SetupDiGetDeviceRegistryPropertyではフロッピー系は"\Device\FloppyPDO0"が見つかっただけでした
フロッピーはAドライブだろ常考
136 :
118 :2010/04/09(金) 23:58:31
>>135 ん?ドライブレター変えたらどうすんの???
責任取れるの?
138 :
134 :2010/04/10(土) 03:20:14
なんかDeviceIoControlとIOCTL_DISK_GET_MEDIA_TYPESで簡単に識別できるみたいです ノシ
思いつきの裏技だがシェルアイコンのインデックスで判定するとかw
HKEY_LOCAL_MACHINE\SYSTEM\MountedDevicesを開いて
\DosDevices\〜からパス取り出して
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enumからそのパスを開いて
ClassGUIDとかで区別できると思うけど
>>135 ねぇPC98版Windowsって知ってる?
Windows3.x 以前のは Windows じゃないことにしておこう
知らん。
あと3ヶ月だねぇ。
ユーザーにドライブの正体は何ですか といちいち設定させるUIでも作った方が確実 アホな自動認識よりはユーザーもそっちを選ぶ
>>141 Windows98もNTもPC98版が存在したが、いったいなにをどうしておきたいんだ?
アプリの二重起動を防ぐのにMutexを使っていたけど、 これってひょっとして名前付きのカーネルオブジェクトならなんでもいいって事? OpenJobObjectとか
OpenじゃなかったCreateか
149 :
118 :2010/04/10(土) 21:35:09
>>148 WinMainの2つ目の引数を使えばええやん
そのためにあるのだよ
16bit時代の方ですか?
ネタだよな。 hPrevInstance アプリケーションの前のインスタンスのハンドルが入ります。 Win32 アプリケーションでは、常に NULL です。
>>147 自分はそう解釈して、CreateFileMappingで二重起動時にアクティブにしたいWindowハンドル入れて使ってる。
勝手解釈なんで、有識者にほんとに問題ないか聞きたい。
さすがイミフな質問するだけあって回答も廃クオリティ
共有セクションを入れたDLLを静的リンクして、共有セクションにある変数を見るとか
>DLLを静的リンク どういうこと?
>>156 なんかおかしくなってた
つまり、libファイルをリンクして、共有セクションのあるDLLが常にロードされるようにしておく
159 :
118 :2010/04/10(土) 23:04:48
全部ダメ。0点。 レジストリにキーを作るくらいダメ解答ばかりやな。
>>155 でもそれ同じパスにあるDLLがロードされないとだめだろ
162 :
118 :2010/04/10(土) 23:31:40
にゃあ
ダイナミックなんとかライブラリ
共有セクションをDLLにする必要はなぜ
EXE内にしたらコピーするだけで回避出来るぜ
リソース無しでプロパティシート作るには? これが出来ると vc と gcc でソース共通にできそうなのですが。 メニューバーは簡単だった。
┌─┐ │●│ └─┤ _ ∩ ( ゚∀゚)彡 ┌─┬⊂彡 │●│ おっぱい!おっぱい! └─┘ おっぱい!おっぱい!
168 :
118 :2010/04/11(日) 22:11:36
122以外で118名乗ってるやつ何者www SendMessageんとことその他いろいろ変えてみたらまぁそこは解決できたっす。 しかし次の問題点。 メインウィンドウのハンドルをWM_CREATE時にDLL側に渡してるんですよ。 それがメインウィンドウがアクティブなときは大丈夫なんだけど、 アクティブじゃなくなるとそのウィンドウハンドルがどっかいくそうです。笑 WM_CREATEで一度しか渡してないのにghWndの値が勝手に変わってるみたいっす。 勝手にってのはありえないけど、実際俺はghWndの値をその一度しかセットしてないのにNULLになってるんですよ。 WM_CREATEのところはただ単に関数でghWndにウィンドウハンドルを渡すだけですので省略しますね。 HWND ghWnd; LRESULT CALLBACK MyHookProc (int nCode, WPARAM wp, LPARAM lp) { if (nCode<0) _goto ret; else if (ghWnd==NULL) _MessageBox(NULL, "ウィンドウハンドルがないっす笑", "DLL", MB_OK); else if (wp==VK_ESCAPE) _PostMessage(ghWnd, WM_KEYHOOK, (WPARAM)0, (LPARAM)0); ret: _return CallNextHookEx(hHook, nCode, wp, lp); }
DLLの使い方くらい勉強しようぜ
頭ぶつけて死んだ方が早そう
171 :
118 :2010/04/11(日) 22:43:58
大抵のバグは本人が問題ないと思って省略しているところにある
グローバル変数といえどもプロセス間では共有されないのは分かってるんだろうか 共有したいならセグメントを共有するよう指定してやる必要がある #pragma data_seg("Shared") HWND ghWnd = NULL; #pragma data_seg() #pragma comment(linker, "/section:Shared,rws")
>>171 サンプルに毛を生えらかした程度の事で
ハマっちゃう人の気持ちって分かる人は少ないから
全ソースうpってみたら?
口調もコードも全てか低脳臭くて^^;
176 :
118 :2010/04/11(日) 23:07:58
>>175 (建前)
わかんねえなられすすんな
俺の質問に答えてりゃいいんだよ!!!
(本音)
こいつらつかえねー
179 :
118 :2010/04/11(日) 23:22:53
>>179 全ソース
↑意味分かる?日本語だよ
無意味な略語や隠語を使いたがる人がいるけど
そのタイプの構ってさんなのかな?
181 :
118 :2010/04/11(日) 23:39:59
bccって#pragma data_segとかサポートしてたっけ?
183 :
118 :2010/04/11(日) 23:43:20
|\__/| / ▼▼▼ ヽ | (●) (●) | | 三 (_又_)三| \__ ^_/ / `ー(Ω)- ' ヽ i ,イ= ヽ i U |三 ノU ⊂ニヽ ,r-.、 イ (,,ノ .ヽ,,)
185 :
118 :2010/04/11(日) 23:47:30
これ使えないんですねo...rz メモリマップトファイル?とやらを勉強してから出直してきます。 お騒がせしました。と、ありがとうございました。
186 :
118 :2010/04/11(日) 23:51:03
>>168 >WM_CREATEで一度しか渡してないのに
WM_ACTIVATEAPPのコードは何なんだ。
メッセージクラッカマクロの返値 (LRESULT)(DWORD)(int) win32 の場合 (long)(unsigned long)(int) これって符号どうなるの?
どうもならない
190 :
118 :2010/04/12(月) 03:19:44
符号なんて利用する側の解釈の問題であって キャストしたからといって符号が変わる訳ではない
Shift-JISにない文字(♥だとかハングルだとか)を含むパスを Unicode非対応のライブラリで扱う必要があります。 とりあえず、GetShortPathNameで8.3形式に変換して渡せば問題ないよう なのですが、この関数で得た8.3形式のパスに現在のコードページで扱えない 文字が含まれないという確証がありません。 そもそも「8.3形式」とは何なのかをズバリ記述したドキュメントはないものでしょうか?
古いファイルシステムの形式(というより制限かな) ファイル名は拡張子をのぞいて最長8文字 9文字以上の場合、aaaaaa~1.txt ってかんじで省略される。 ただそれだけ。 だからそのシナリオで8.3形式に変換する意味はない。
194 :
192 :2010/04/12(月) 12:14:22
英語版Wikipediaの"8.3 filename"の項には > The DOS filenames are in the OEM character set. という記述があるのですが、これをMS自身のドキュメントで確認したいんですよね。
196 :
デフォルトの名無しさん :2010/04/12(月) 12:45:48
ここで質問していいのかわからないけどとりあえず書きます。 CreateFont()で高さを↓で指定したのと同じように -MulDiv(Size, GetDeviceCaps(hDC, LOGPIXELSY), 72) Gdiplus::Font()でサイズを指定して同じ大きさにしたいんですが 普通にGdiplus::UnitPoint にしてサイズを指定しただけでは サイズによっては大きさが結構違ってしまいます。 どう指定すればいいでしょうか?
198 :
192 :2010/04/12(月) 13:14:24
>>197 う〜ん、自分がやってることの裏付けが取れれば十分なので、
そこまで追究するつもりもないのですが……
いかにも問題が起きそうですね、それ。
OEMコードページが異なるシステムで正常に読めないのは当然だし ntfsではオプションだしexfatには存在すらしない
XPのIE8で、ある拡張子のファイルをクリック、「ファイルのダウンロード」から 「開く」で関連付けされているファイルを自作アプリで開くようにしてるのですが C:\Documents and Settings\user_name\Local Settings\Temporary Internet Files\Content.IE5\XXYYWWQQ\hoge.abc のファイルをCrateFileで開こうとすると失敗するようになりました。 VistaのIE7でも失敗します。IE6では問題なかったのですが。 fopen()では開けるのですが下のようなCreateFileでは失敗します。 何かオプションの設定が必要なのでしょうか? OPENFILENAME ofn; ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; hFile = CreateFile(ofn.lpstrFile, GENERIC_READ, 0, (LPSECURITY_ATTRIBUTES) NULL OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, (HANDLE) NULL); if (hFile == INVALID_HANDLE_VALUE) { TRACE("Fail createfile\n"); return FALSE; } ※ GetOpenFileName(&ofn) は呼んでいません。ofn.lpstrFile にはTemporary ...のフルパスファイル名が入ってます。
201 :
196 :2010/04/12(月) 13:59:16
レンダリング時の画面モード?みたいなのがあるのかな… ぐぐってもわかんないや…
>>200 自己レスです
3番目のオプションに0ではなくて FILE_SHARE_READ を指定したら開けるように
なりました。
203 :
196 :2010/04/13(火) 00:11:37
自己解決!! 指定してたフォント名が正しくなかった…(スペース入れ忘れ) でもCreateFontの方はそれを考慮してくれてて 狙ったフォントが表示されていたけど Gdiplus::Fontの方はそれは考慮されず 違うフォントが表示されていたからフォントサイズが違ってました… 完全に一人相撲でした… スレ汚しすんません!
CreateFileでオープンに失敗するファイルがありますが、このファイルを オープン(読み込み状態)することは可能でしょうか? 失敗時にGetLastError() で確認したところ 32 (別プロセスが使用してるためアクセスできない) を返しています。 CreateFileのパラメータは以下になります。 CreateFile(_T("path"), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
CreateFile(_T("path"), GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); これでダメなら諦めろ
>> 205 そのパラメータも試してみましたが、無理でした。 ファイルの中身をチェックするTOOLを作成してるので、どうしても読み込みたいのですが・・・
無理なもんは無理。
>>206 ロックの意味がなくなるので薦めないけど
いったん開いてダメだったら強制的にロック解除して開きなおせばいいんじゃない?
強制的にロック解除なんてできんの?
どうやってやるのか教えてください!
pagefile.sys はどうやったらロックを解除できますか?
ページファイル無効にして再起動したら外れてないか?
そういうんじゃなくて、実行中にロックを外したいんだけど。
死んだ方が早いから自殺しろ
>215 OSが掴んでるんだからそんなことはできないと考えるのが普通じゃない?
ページファイルって、どうしてファイルにしちゃったんだろうな。 HDDに専用のパーティションを作る方式にした方が安全だし速いだろうに。 ファイルとして他のデータと同列に格納されてるんだから、 非公開のアクセス手段があると考えた方が自然だと思うんだけど。
219 :
118 :2010/04/14(水) 01:43:13
ページファイルなんだから当たり前だろ。
>非公開のアクセス手段があると考えた方が自然だと思うんだけど。
素人の常識ほど危険なもんはない
223 :
118 :2010/04/14(水) 13:14:42
自分語り 乙w
別にLinuxもSolarisも*BSDもswapファイルも使えるだろ
質問です。 ファイルパスを正規化する方法はないでしょうか? ".."や"."を解決し、なるべく綺麗なパスにする方法です。 例えば "data/hoge/.././sub/" を "data/sub/" にしてくれるような感じです。 PathCanonicalize がそれに一番近いと思ったのですが、 "..\\test" を "\\test" に変えてしまったり( "..\\test"はそのままで良い") "test\\..\\hoge" を "\\hoge" に変えてしまったり( "hoge" になってほしい) どうも挙動が不自然です。 特に先頭に '\\'をつけられてしまうと、fopenなどがうまく動作しません…。
chdir して pwd を取得し直す とか
APIでやらないとだめ? 単純に「\.\」は「\」に置換して、あとは正規表現で「hoge\..\」みたいなパターンを前から順番に削除してけばいいだけじゃん
>>228 いえ、単に PathCanonicalize みたいなAPIが用意されていたので、APIがあればと思ったのです。
\\ から始まるネットワークアドレスとか、c:\とか、そういう「知らない人は知らない」パスもありますし、自分自身がそれらのパス表記法を全て知っている自信はまったくないもので。
「\.\」も、SJISだと問題がありますしね。
\\.\c:\hogehoge みたいなのもあるなー
>>230 それって実在する可能性のあるパス表記法ですか?
途中に ":" が入っていることなんてあるんでしょうか?
232 :
118 :2010/04/14(水) 17:08:13
在るっつってるのに在るのか聞くとはこれいかに
236 :
118 :2010/04/14(水) 17:47:05
ビングレカス
↑こっちまで恥ずかしくなるような低脳レスを繰り返すな
信用していないのではなく「ある」が「引数として渡される可能性がある」という意味だと捉えたためです。
レスありがとうございました。
>>235 参考にさせていただきます。
"\\.\c:\" でググっても全然ひっかかりません><;
240 :
118 :2010/04/14(水) 18:05:18
>>231 少なくとも
>>228 >単純に「\.\」は「\」に置換して、
の言うことは聞いては駄目!!
242 :
118 :2010/04/14(水) 20:15:53
>>241 じゃ、てめぇが代案示しなよ
非難ばっかするな
>118 >242
245 :
118 :2010/04/14(水) 20:37:21
ドライブレターの直後以外でファイルパスの途中にコロンが入るのってどんなケース?
ないと思う。あ。なんとかストリームってコロンだっけ。
248 :
118 :2010/04/14(水) 21:23:41
そういえば最近はWebDAVのアドレスなんかにも対応しないとだめだな
>>248 UNCってファイル用のAPIで普通にオープンとかできるの?
パスの先頭に\\?\UACとか付ければ開けるんでなかったか
Alternate Data Stream
トラックバー(スタイダー)の質問です。 つまみ以外の場所をクリックしたら即座にその値を設定したいのですが、その方法が分かりません。 具体的に言うと、つまみがPageSizeの幅づつ移動するのでなく、 MediaPlayerのように一瞬でつまみがカーソル位置に移動して欲しいのです。 どうしたらいいでしょう。
255 :
デフォルトの名無しさん :2010/04/15(木) 06:52:02
>>247 代替ストリーム
ファイル名とかフォルダ名の後ろに「:ファイル名」
そういえばWindows7からサブストリームがコマンドラインから開けなくなったよな 地味に困る
257 :
118 :2010/04/15(木) 09:58:35
フルパスで32000文字程度 各要素はファイルシステム依存 FATやNTFSは255文字 fsutil fsinfo volumeinfoでコンポーネント最大長を確認できる
260 :
デフォルトの名無しさん :2010/04/15(木) 11:03:52
MAX_PATHの用法用量は正しくお使いください。
なるほど 全体が32767文字までいけても、ファイル名だけの長さにも制限があると ありがとう! あと、どうやら \\?\ をつけた場合 ・絶対パスじゃないといけない ・'/' ではなく '\\'を使う必要がある ・..\\ などのかけあがりなどを含めてはいけない となるようだ 認識あってますかね?
>>258 The Windows API has many functions that also have Unicode versions to permit a maximum path length of approximately 32,000 characters composed of components up to 255 characters each in length.
面倒くさいからエラー出るまで適当にやって エラーが出たらきちんと対処することにした
265 :
118 :2010/04/15(木) 14:19:09
これ開くとキャッシュに画像が残るから単純所持違反でお縄って寸法ですね
グロ貼んな
268 :
118 :2010/04/15(木) 15:10:05
>>266 CreateFileでFILE_FLAG_NO_BUFFERINGすればええやろ
質問です。 uintptr_t p = _beginthread と走らせたスレッドが、終了しているかどうかを p を使って知る方法はないでしょうか?
270 :
デフォルトの名無しさん :2010/04/16(金) 12:37:50
ppp
>>269 無い
pが有効なカーネルオブジェクトのハンドルでない場合 終了した
pが有効なカーネルオブジェクトのハンドルである場合 終了した後ハンドルが再利用されたかもしくは終了していない
ただしCREATE_SUSPENDで_beginthreadしてHANDLE_FLAG_PROTECT_FROM_CLOSEフラグをセットすれば普通に判定可能
>>271 はあ?
WaitForSingleObject って知ってる?
質問スレで嘘書いててんじゃねーよ
_begintheadは何を返し、何をなすか。 スレッド終了時に何をしているか を調べなされ。 ていうか、VCスレで訊いた方が良いぞ。 処理系依存だし。
過去スレほじくってたら WinAPIスレでたまに話題にあがってるな _beginthread は スレッド終了時に戻りのハンドルを CloseHandle しやがりますので _beginthreadex 使えぇぇ とか
275 :
デフォルトの名無しさん :2010/04/16(金) 13:54:31
socketでsrcポートとdstポートを指定する方法をおしえてください
CloseHandleしやがるからこそ、WaitForSingleObjectで終了しているのかを監視できるんとちゃうん?
>>276 いや
スレッド終了時にシグナルになるから WaitForSingleObjectで終了しているのか判断できる
CloseHande しやがる場合
_beginthread で得られた戻りが WaitForSingleObject で確認するまでの間に
ハンドルの再利用の可能性を否定できないから嫌らしいワケ
CloseHande されない場合、確認側が明示的に CloseHandle するまでの間
ハンドルの衝突を防ぐことができるから より確実だ ということさ
なるほど。 スレッドが終了する前にWaitForできるとは限らないもんな 今ちょっと実験してみたが、スレッドが既に終了している状態でWaitForすると、 WAIT_FAILED を吐いた上で、GetLastErrorは ERROR_INVALID_HANDLE だわ。無効なハンドル。 再利用がどれくらいの頻度で行われるのかもついでに試してみたら、意外と再利用されまくるのね。 ハンドルが簡単にかぶるわ
280 :
279 :2010/04/16(金) 14:33:12
Win32APIを弄りだして最初に面食らう一つがCloseHandle。
>>279 >>CreateFile が返したオブジェクトハンドルを閉じるには、 関数を使います。
>とだけ書かれていて、「どの関数」 かが明示されていません。
クソワロタwwwwwww マジで日本語版MSDN死んでいいよwwww 嫌がらせだろこれww
When an application is finished using the object handle returned by CreateFile, use the CloseHandle function to close the handle. 機械翻訳の過程で CloseHandle を close hande と置き換え→すっとばし発生 なのかねw
MSDN見るなら英語版にしろって言う人時々いるけど、これまさにその1例になりそうな話だなww そして何かのコピペになりそうだw 問い「これはどうしたらいいのですか?」 答え「関数を使います」
関数呼び出しにに必要な構造体とか関数ポインタ型へのリンクがないだけでも 使いものにならないのに。
>>271 すいません、調べてみても
HANDLE_FLAG_PROTECT_FROM_CLOSE
を使う必要性が感じられないのですが。
そもそも_beginthread はCREATE_SUSPENDが使えませんし。
総合すると _beginthreadex を使えばOK
ということになりそうなのですが、exを使った場合でも
HANDLE_FLAG_PROTECT_FROM_CLOSE
の出番はありますでしょうか?
いまだにVC6使ってる俺は2001年10月版の日本語MSDN使ってるけど ちゃんと CreateFile が返したオブジェクトハンドルを閉じるには、CloseHandle 関数を使います。 てなってるな。劣化してるのかな?
>>287 >>271 は良くわかっていない初心者だから放置していいよ。
exから得たハンドル使えば解決。
>>287 無い。 が、終了確認後に CloseHandle してやらないとまずい。
_beginthread
○ スレッド終了時に自動的にハンドルをクローズする(リソース漏れは自動回避される)
そのかわり 終了判定は困難
「終了確認前にスレッドが終了しているか否か」 で判定の意味が変化してしまう
# そして、終了確認側で既にスレッドが終了しているか否かを知る術は?… と自己矛盾な記述に…
_beginthreadex
○ スレッド終了後もハンドルは維持され終了判定は容易。
だが、自前でハンドルをクローズしないと漏れ漏れ
>>287 CREATE_SUSPENDが使えないなら新規スレッド側で待機
_beginthreadexを使うなら必要ない
すいません、何度も細かく聞いて申し訳ないのですが。 _beginthreadexで作ったスレッドには、解放すべきものが二つある。 1・_endthreadex で解放する「何か」 2・ CloseHandleで解放する「スレッドの生死などを確認するなどに利用する、何か」 1は、スレッド用の関数を抜ければ自動で呼ばれるので、きちんと抜ける場合は呼んでも呼ばなくても良い 2は、明示的にクローズしてやる必要がある。 スレッドを作った側でクローズしても、スレッド側でクローズしてもOK(だけど二重にクローズしないようにな!) また、スレッドが生きている間にクローズしても(生死確認などができなくなるだけで)問題ない。 という認識正しいでしょうか?
>>292 1 おけ
2 おけ 生死判断したいなら、生死判断した後にクローズ(おおよそ スレッドを作った側ではある)
ありがとうございます。 exじゃない版は、連絡用の「何か」とスレッド用の「何か」が分離されていないから色々扱いづらかったんですね ex版を使うべきっていう意見を正しく理解できたと思います。
>>294 「何か」=「_begintheadがCreateThreadを呼んで返された『スレッドハンドル』」な
>>294 スレッド用の何かというが、exでもランタイムが使うTLSなんてユーザー側に見せてないだろ
分離できてないのはお前の頭じゃね?
だから「何か」って表現してんだろ
>>296 インストール時にCRTのソースもインストールしておくと実装が見れるが
TLS だけじゃなく、浮動小数点周辺や構造化例外(C++ の例外をうまくスレッド別に配送)の面倒を見てるね
ま、ランタイムにかかわる表面には出てこない何かとひとくくりの表現で良いんでない? (1の何かに関して)
最近打ち合わせでは分かり切ったことは飛ばして話を進めているのに 知識として持っててあたりまえのことを質問する馬鹿が増えた
300 :
118 :2010/04/16(金) 21:13:46
そうかあ。 俺、ブラやぱんつに興味ないんだ。 スリップが透けてるといいと思うけど、いないしな。 下着なしも、もっといないしな。 透けてなくていいよ。
質問 環境はWin7、VC6++でダイアログベースのアプリです。 マウスオーバーでダイアログを非表示にして、表示されていた位置からマウスを 離すと再びダイアログを表示させることはできますか? 非表示はWM_MOUSEMOVEのときにShowWindow(SW_HIDE)でできるんですが マウスを離して表示させるのはどうやったらできるでしょうか。
>>301 やった事無いけどパッと思いつく方法としては、
その非表示のタイミングでマウスをSetCaptureしつつ、Screen座標ひろっておいて、
移動中、一定距離離れたタイミングで再び表示&ReleaseCaptureしてやるとか
きちんと動作確認して、不意な操作や例外的な対処もしないとマズいけど
303 :
デフォルトの名無しさん :2010/04/18(日) 16:49:07
WM_MOUSEMOVE (1回目はマウスをキャプチャするだけ) SetCapture ShowWindow(SW_HIDE) WM_MOUSEMOVE (2回目はHIDE中に呼ばれていればマウスキャプチャをリリース) ReleaseCapture ShowWindow(SW_SHOW)
>>302 ,303
回答ありがとうございます。
SetCapture試してみます。
>>304 じゃないけど試してみた
使い方間違ってるのかもしれないけど
Hide した直後から WM_MOUSEMOVE が来なくなってるみたいだw
Release しようにもマウス座標が取れないw
>>305 304です
同じくうまくいきませんでした。
SetCapture後にHideしたらかってにReleaseされて
Hide後にSetCaptureした場合はキャプチャされないような動きです。
TrackMouseEventとWM_MOUSELEAVEを使ったらいけるんでない?
LayeredWindowにして alphablendを0にして translatedにするといいかも
× translated ○ transparent
310 :
デフォルトの名無しさん :2010/04/18(日) 18:05:09
SetCapture関数はフォアグラウンドウィンドウでしか使えなかった筈なので、 フォアグランドで且つオーナーなウィンドウがSetCaptureしてやればいいと思うよ。 例えばGetDesktopWindow()で取得したHWNDをSetCapture()に渡すとか。
311 :
304 :2010/04/18(日) 18:38:44
>>307 Hideした瞬間にWM_MOUSELEAVEが来てしまいました。
そのときのWM_MOUSELEAVEを無視するとして
ダイアログがあった場所から離れてもWM_MOUSELEAVEはこないようです。
>>308 透明ウィンドウにするという発想ですか。なるほど・・
半透明にもできたりしてそれはそれでよさそうです。
>>310 デスクトップのHWNDをSetCaptureに渡してみましたが、
渡さない場合と同じくWM_MOUSEMOVEがこないようです。。
ん〜、いけるような気はするのですが。
>>310 それだとSetCaptureしたあとのマウスイベントがDesktopWindowの方に逝っちゃう
とりあえずアイコン化(最小化)するっていう手もあるかもね 自分で戻さないといけないみたいだけど
コントロールを透明化したら、下のコントロールじゃなくてデスクトップまで透けてしまった
荒れてないときのWIN32スレはすごいぬ、天才ばっかりだぬ
単純にタイマーでカーソル位置を監視ってのじゃ駄目かな…
TrackMouseEvent で MOUSELEAVE は無視して MOUSEMOVE を見れば良いと思う
TrackMouseEvent で WM_MOUSEMOVE はこないようです
面倒だからフックしろよ
フックだ、チンだ、あーらのびちゃった
321 :
118 :2010/04/19(月) 14:06:18
322 :
デフォルトの名無しさん :2010/04/19(月) 14:49:52
DrawIconExでマウスカーソルを縮小してHDCに埋め込みたいんだが、 beamのアイコンがつぶれてしまう。 なんかいい方法ない?
>HDCに埋め込みたい 関係無いけど、この表現に物凄い違和感
塗り込みたい
325 :
118 :2010/04/19(月) 18:15:19
ネトウヨうぜえ
326 :
304 :2010/04/19(月) 20:23:25
>>316 一応その方法で行くことにしてうまく実現できました。
今回のやりたいことを実装してるツールがVectorにあったので、
Spy++で見てみるとそれもTimerでやってるみたいだったので
真似することにしました。
327 :
デフォルトの名無しさん :2010/04/20(火) 16:17:39
ノートPCで現在AC電源か、バッテリーを使ってるかを識別できるAPIを教えてください
328 :
118 :2010/04/20(火) 16:52:02
ノートPCかデスクトップを判別するAPIが無いから不可能
330 :
デフォルトの名無しさん :2010/04/20(火) 17:00:46
相変わらず糞の役にも立たないゴミ共だなww GetSystemPowerStatusであっさり出来たわ役立たず共
331 :
118 :2010/04/20(火) 17:25:45
332 :
デフォルトの名無しさん :2010/04/20(火) 17:39:21
お前はアホー知恵袋でオナニーでもしてろゴミ
333 :
118 :2010/04/20(火) 17:49:42
何だか近頃無用のレスと自己主張をしていて他人を多少なりとも面倒くさい気持ちにさせるだけのために存在するんだろうと思わせる何かをよく見かけるが それすら全くどうでもいい
何てどうでもいいレス
結局、質問スレに書き込んでも自己解決が一番最適な方法だ、というオチ。 他人に質問する前にテディベアに質問しなさい、てやつですな。 書き込んだ質問の内容でググればあっさり見つかったりするしね。
337 :
デフォルトの名無しさん :2010/04/20(火) 18:57:13
質問です。 HeapAllocとかHeapFreeとかのフラグ、HEAP_NO_SERIALIZEの説明の「相互排他」って何ですか? ググッた結果、マルチスレッドであちこちからメモリ確保するときに、何かしてくれる?と思うのですが、 その「何か」がよく分かりません。 >HEAP_NO_SERIALIZE:この関数がヒープにアクセスしている間、相互排他を行わないようにします。 ↑この一文を分かりやすく解説してください。
338 :
118 :2010/04/20(火) 19:40:01
>HEAP_NO_SERIALIZE:この関数が動的に確保した領域にアクセスしている間、他のスレッドからもアクセス可能になる。
クリティカルセクションを使わない
なんかところどころレスが空欄になってるんだが
キチガイが居るだけだ 気にするな
342 :
118 :2010/04/20(火) 20:48:34
↑ おまえがな
343 :
デフォルトの名無しさん :2010/04/20(火) 21:00:50
「ファイルを開く」DLGでUNCなどのMAX_PATHを越える深いパスを扱えるようにするにはどうするのですか? ちなみに cygwin を用いて深いディレクトリ、ファイルは生成できます・・・
タスクマネージャーのプロセスシートに自作アプリを列挙させないようにするにはどうしたらいいですか?
>>344 MFCを使ってダイアログベースで作ってます。
347 :
デフォルトの名無しさん :2010/04/21(水) 11:07:46
常駐プログラム隠蔽テクニック でぐぐる
なんだ、結局しらねーんだw
他所様のプロセスにインジェクションして寄生すれば
350 :
デフォルトの名無しさん :2010/04/21(水) 13:01:02
>>345 >UNICODEで開発
343です。
当初私もそう思っていました。
UNICODE版のGetOpenFileNameWを使っているのですが、
開くDLG(コモンダイアログ)内部でMessageBoxを表示しているようです。
OFNHookProcも試したのですが、CDN_FILEOKが呼び出されません。
WndProc をHOOKして[OK]ボタンや[ファイル名DBLCLK]を横取りしないといけないのでしょうか?
351 :
デフォルトの名無しさん :2010/04/21(水) 16:29:38
IPヘルパAPIでDOSコマンドのroute printで表示される Persistent Routesリストの取得方法を教えてくださいください
たぶん隠しAPIのAllocateAndGetIpForwardTableFromStackを使う
353 :
デフォルトの名無しさん :2010/04/21(水) 17:02:10
ぐぐっても出てきません><
regmonで見た限りではAPIではなくレジストリを直接読み書きしている模様 System\CurrentControlSet\Services\Tcpip\Parameters\PersistentRoutes System\CurrentControlSet\Services\Vxd\MSTCP\PersistentRoutes
355 :
デフォルトの名無しさん :2010/04/21(水) 17:10:51
>>354 ありがとうございます。
確かにレジストリに存在しました!
これを弄くり倒します。
356 :
デフォルトの名無しさん :2010/04/21(水) 17:15:33
あ、そういやこれで確かにリストは取得できるけど route add ができない>< いやレジストリに追加しただけでは実際にルート処理されないですよねこれ?
357 :
デフォルトの名無しさん :2010/04/21(水) 17:20:53
ちなみにPersistentRoutesを検索してみたら3箇所でてきた。
んで
>>354 の2つ目のServicesの中にVxdは存在しませんですた。
とりあえず、レジストリエディタで適当にルートぶち込んでみっかなあ
358 :
デフォルトの名無しさん :2010/04/21(水) 17:46:07
おっと!!!
そういやActiveアレには普通にaddできるんだから
レジストリに追加しといてヘルパapiでActiveにaddすりゃーいいってことか!!!
レジストリにかいときゃリブったらちゃんとアレされたのは確認できたし
いやはや
>>354 に感謝
vxdはwindows98等 自分なら裏でroute.exeを実行する
360 :
デフォルトの名無しさん :2010/04/21(水) 18:20:35
>>359 vxdありがとう。
ちなみに最初はShellExecuteでroute.exeを実行してaddやdeleteをやってたんだけど
ヘルパAPIなるものでActiveの操作は普通にできたからPersistentもいけるんじゃないかなとかおもって
深みにざっくり嵌ったわけですよ
ぶっちゃけレジストリ弄くるのも不本意なんだがAPIでできないっぽいからそこは曲げてアレ
GDI+のImageクラスでbmpファイルを読み込み、 CreateCompatibleBitmapで作成した領域に描画して、 BitBltの背景色を利用して白黒の1bitモノクロ画像に変換しようとしたところ、 GDI+で読み込んだビットマップがうまく変換されませんでした。 ちなみにCreateCompatibleBitmapのところをCreateDIBSectionすると期待どうりに変換されるのは分かったのですが、 どうしてCreateCompatibleBitmapだと変換できないのかが理由が分かりませんでした。 言語はC++でMFCなどは使用していません。 理由が分かる方がいましたら教えてください。
背景色指定が合っていないんじゃないか? GetPixelで返ってきた実際の値を使わないと駄目、とかありそう。 素直にDIBSection使っといた方が良い気がするけど。
363 :
361 :2010/04/22(木) 05:46:16
>>362 有難うございます。
GetPixelで取得した値を使用してみても駄目でした。
なぜCreateCompatibleBitmapだとSetBkColorで設定した色が変換されないのかが分からないままです。
パレット
パレット
プディング
367 :
デフォルトの名無しさん :2010/04/22(木) 12:57:16
パンナコッタ
なんてこった
369 :
118 :2010/04/22(木) 14:32:00
黙れゴミ共
370 :
118 :2010/04/22(木) 14:33:04
>>368 >>367 爆笑、お前面白すぎ、
エンタに出てる芸人以上じゃね?
久々にわらかしてもらったわw
371 :
118 :2010/04/22(木) 14:33:46
どこに書いたらいいかと思ったけど、Windows系の質問なのでこちらにしました。 シリアルポート com1とかが他アプリから開いたイベントを取得したいのですがどうすればよろしいでしょうか? 案としては CrateFile("com1" ・・・ で開いて閉じてを繰り返し開の失敗したら開かれてるとする。 デメリット:ちょっとカッコ悪いし、もし開いて閉じる間に空いてが開こうとすると相手側がエラーになる LoadLibraryのhook デメリット;comのオープン方法がCreateFileで開かれなかった場合。他にもAPIありますよね? なんてのを考えてるんですが、他に良い案ないでしょうか?
フィルタドライバを作成して、IRP_MJ_CREATEを捕まえる
返答ありがとうございます。 フィルタドライバですか、経験なかったです。 調べてみるとちょっと敷居高そうですが、チャレンジしてみます。 ありがとうございました。
375 :
デフォルトの名無しさん :2010/04/22(木) 15:52:04
RegEnumValueでキーの値を取得しているのですが 登録されている数分ループするのですが正常に値が取得できないのがあります。 4個登録されていてループは5回目で抜けるのでそこはOKなんですが データも3個までは正常にとれてますが4個目は何故かNULLになっています。 どうしてですか?
376 :
デフォルトの名無しさん :2010/04/22(木) 15:58:10
できましたおさわがせしましたごみすみませんどもでしたしね。
377 :
デフォルトの名無しさん :2010/04/22(木) 17:39:34
おいおい、せっかくYahoo!知恵袋のアカウント変えたのにまだいるのか118もどき。 相変わらず118を名乗る理由がよくわからんがな。
378 :
118 :2010/04/22(木) 17:48:52
↑ お前の発言ワケワカラン
379 :
デフォルトの名無しさん :2010/04/22(木) 20:50:13
380 :
デフォルトの名無しさん :2010/04/22(木) 21:58:23
>>378 んじゃいいや笑
まぁ見づらいからあんま無駄レスすんなよ。
以上無駄レスでした。
381 :
デフォルトの名無しさん :2010/04/22(木) 22:09:49
UNICODE, _UNICODE指定でビルドすればいいんじゃないのん?
382 :
118 :2010/04/22(木) 22:19:48
ヘ⌒ヽフ ( ・ω・) dd / ~つと)
384 :
118 :2010/04/22(木) 23:05:49
www
385 :
118 :2010/04/22(木) 23:12:21
VS2010もう入れた?
386 :
118 :2010/04/22(木) 23:14:12
VS2020もう入れた?
387 :
118 :2010/04/22(木) 23:26:03
VS2010インストールしたよ。
388 :
118 :2010/04/22(木) 23:29:10
したよ。
389 :
118 :2010/04/22(木) 23:40:53
俺はまだ。ダウンロードはしたけどな。
390 :
118 :2010/04/23(金) 00:38:00
あw
391 :
118 ◆ToxyFMVOts :2010/04/23(金) 01:00:03
お前らいい加減にしろ
392 :
119 :2010/04/23(金) 01:03:05
↑ お前キモイ
393 :
118 ◆ToxyFMVOts :2010/04/23(金) 01:52:01
自分語り 乙w
質問。ウインドウのクラス化なんですが、 lpfnWndProcにstaticなメンバ関数をセットして、そこでGetWindowLongでポインタを取得しようと思ったんですけど CreateWindowをコールした時点でstaticなメンバ関数が呼ばれてしまいます
>>394 lpfnWndProc が static メンバ関数へのポインタだから
CreateWindow 時にコールバックされるのは lpfnWndProc で指示された static メンバ関数となるのは必然
質問の要点が不明だが… その後オブジェクト側へ配送したいという欲求か? (C++を想定)
class A {
static class A* m_pThis;
static LRESULT my_proc(HWND,UINT,WPARAM,LPARAM);
virtual LRESULT wnd_proc(HWND,UINT,WPARAM,LPARAM);
};
CreateWindow する前に m_pThis = "対象obj"
my_proc内:
GetWindowLong してない? yes) m_pThis をセットし、"対象obj" no) そのまま "対象obj"
"対象obj" -> wnd_proc() で配送
マルチスレッド対応するなら m_pThis を TLS で分離
MFCは GetWindowLong枠に objを仕込まず スレッド別で HWND⇔obj のマップテーブルを使ってる
ATL/WTLはサンク使ってる。
Core i7 で物理コア数を取得したいのですが、 CPUID や GetProcessAffinityMask では論理コア数しか取得出来ません。 もしかすると私のやり方が悪いのかもしれませんが…。 どなたか物理コア数の取得方法を教えて下さいませんでしょうか。
GetSystemInfoで物理コア数が取れないか? 論理プロセッサ数が欲しけりゃ別API使えってわざわざ書いてる位だし。
>>397 SYSTEM_INFO sysinfo;
GetSystemInfo(&sysinfo);
printf("dwNumberOfProcessors %d\n", sysinfo.dwNumberOfProcessors);
ご回答ありがとうございます。
上記の様にした所、8の数値が返ってきました。
Core i7 860 の物理コアは4のはずなので、
多分論理コア数かと思われます。
>>395 どうもありがとう。
ちなみにイベント発生毎に毎回GetWindowLongするのって重いんですか?気にするほどでもないですか
400 :
118 :2010/04/23(金) 21:40:55
ハイパースレッドってOSから見たら物理CPUに見えるんじゃないの?
401 :
118 ◆ToxyFMVOts :2010/04/23(金) 21:42:11
自分の回答が読めないじゃん。
403 :
118 ◆ToxyFMVOts :2010/04/23(金) 22:04:19
つーかニセモノウザイよ。
お前が偽物じゃね?
406 :
TT8 :2010/04/23(金) 22:15:02
俺が偽者だ!
407 :
ll8 :2010/04/23(金) 22:16:48
そうだな
408 :
118 ◆ToxyFMVOts :2010/04/23(金) 22:51:02
マジ低脳共がウザすぎる
数字コテもトリップ付ける知恵を身に付けたが、 数字コテ自体の弱いところを突付かれたな。 もう誰が本物かはどうでもいい。 なぜならば、俺たちが数字コテだからだ。
410 :
118 :2010/04/23(金) 23:23:35
CPUIDで取るしかないんかね。
411 :
118 ◆ToxyFMVOts :2010/04/23(金) 23:23:40
↑誰かこのゴミ回収しとけ
412 :
118 ◆CB.8kw7Ixg :2010/04/23(金) 23:35:05
なんでトリップ割れたんだろ?
413 :
118 ◆HC9IbFdEiw :2010/04/23(金) 23:38:09
知らんがな。
実は大概の酉はググればでてきちゃう
更に言うと◆HC9IbFdEiwの酉は #811
マジ偽物うぜぇ
417 :
118 ◆c37UjiIGfA :2010/04/24(土) 00:04:35
もうコレで行くわ これなら単細胞共にはわかんねーだろ
ばればれわろたwwww #1180
419 :
118 ◆l9Zkhsj0XQ :2010/04/24(土) 00:09:54
↑このゴミを処分することを許可する
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ こいつ最高にアホ 彡、 |∪| / 何様のつもりですか / __ ヽノ / (___) /
これは俺ものるしかない
422 :
391 ◆CB.8kw7Ixg :2010/04/24(土) 00:25:25
118を語るやちらは消えろ 俺が本物
いやいや某でござる
>>410 GetLogicalProcessorInformationで一応できるけど、
Vistaより前は無理だからCPUID使っとけって書いてるな。
425 :
118 ◆5aHxUR0jw6 :2010/04/24(土) 03:41:41
>>422 は?てめえになんざ興味ねぇよ
失せろ391
426 :
118 :2010/04/24(土) 07:39:51
↑ 興味ないのにその喰いつきはなんなんでしょうかw
ここネタスレだったのか 今まで全く気付かなかった 迂闊だった
今までアプリのセットアップにInstallShield 6.3を使っていたのですが 諸事情で自分でセットアッププログラムを自前で作り直すことになりました。 で、インストール処理自体は問題ないのですが、インストール後にOSの再起動が 必要なので、ExitWindowsExを呼び出すようにしたのですが、たまに見る 「ウィンドウステーションがシャットダウン中であるためアプリケーションが初期化に失敗しました。」 のエラーダイアログが頻繁に出るようになりました。 他のアプリが出しているエラーだし、無視しても問題ないことは分かっているのですが どうも気持ち悪いのと、InstallShieldを使っているときには見なかったので 何か回避する方法があるのかなと思っています。 ちなみに、ShellExecuteで"shutdown -r"を呼び出してもやはりエラーダイアログは 出てしまいました。 DOSプロンプトから呼び出したときには見たことがないのに、なぜなんでしょう。
元に戻したいのか 解決したいのか 結局どっちなんだ?
430 :
118 ◆pOL/VRNq6Y :2010/04/24(土) 12:59:02
普通にWindows Installer使えよ
ShowWindow(hWnd,SW_HIDE); でウインドウを隠してから ↓ ShowWindow(hWnd,SW_SHOWNORMAL); SetWindowPos(hWnd, HWND_TOP, 0, 0, 0, 0,SWP_NOSIZE | SWP_NOMOVE); でどのウインドウよりもZ軸が上になって表示されると思ったんですが、 他のウインドウの下にある状態で表示されてしまいます。記述が間違っているんでしょうか?
432 :
118 ◆pOL/VRNq6Y :2010/04/24(土) 21:17:17
HWND_TOPMOSTだろ
433 :
431 :2010/04/24(土) 21:44:12
TOPMOSTだと常にどのウインドウよりも一番上になってしまいました。 通常状態でZ軸の一番上に持ってこようと思っています。
435 :
118 ◆pOL/VRNq6Y :2010/04/24(土) 22:21:35
よくわからんのだけど、一時的に最前面に持ってきたい、ってこと? 制限はあるけど、SetForegroundWindow()でいいんじゃね?
>>435 できました、ありがとうございます。
何故431で駄目だったのかは謎です
よくやった!
438 :
デフォルトの名無しさん :2010/04/25(日) 11:58:05
ChangeMenuのAPIの詳細が知りたいです。教えてください。お願いします.
439 :
118 ◆ayPjxbmM2c :2010/04/25(日) 12:13:31
そんなAPIない。
char folder[100]="C:\\project"; CreateWindow("STATIC",folder…); でフォルダ名を表示させてるんですけど、ものすごい長いパスでも表示できるようにしたいです。 CreateWindow("EDIT" にしてもパスがボックス以上の長さで表示されません、→ボタンを押したら続きが 表示されるようにしたいのですがどうすれば良いのでしょう。
CreateWindowW
そうなるように自分で書け。ツールチップ使うなりなんなり自分の都合で
443 :
440 :2010/04/25(日) 20:25:56
パラメータ不足でES_AUTOHSCROLLを追加してできました。 ツールチップという方法もあるとは、自分で調べる癖をもっと持たないと駄目ですね
444 :
デフォルトの名無しさん :2010/04/26(月) 09:47:06
p
445 :
118 :2010/04/26(月) 11:07:48
誰か構ってくれ〜 ゚∩ :ノノ ゚ し′ ,,------ 、 ノノ ∪ ∩ /: ____▽,,,,,,_ヽ 。:∪・ ⊂ヽ ノノ :∩ } i:ェェヮi ト.ェェ:-i { /⌒Y⌒\ プ :):) じ :ノノ 。 ヾ::/イ__l丶 r'1ノ ノ ) じ :∩ 。 ( ( .}::l: ゝ--イ l:: {^\ビチグソ | . ヽヽ ヽj ト!;_`二´_,,;!イ| | ノ :| ∩ じ | |__三___| |_/| | ノノ ∩ :∩ | | ヽ| ト' | |/^ヽ じ :ノノ ∵ :ヽヽ | | | |_/ ヽ__人_ノ ∪ し′ ⊆, っ とーっ
>>424 >>396 です。118ではないです。
GetLogicalProcessorInformationを使ってみました所、
物理コア数の4が取得出来ました。
ですがおっしゃってる通り、古いOSでは使えないのですね。
XPもSP2以前だとダメな様でした。
CPUIDだと、IntelはCPUID(4)のEAX(bit31-26)以外に、
コア数を取得出来る所があるのでしょうか?
もしご存じであれば教えて頂ければ幸いです。
447 :
118 :2010/04/26(月) 16:42:11
もしご存じであれば教えて頂ければ幸いです。 ↑ 俺のために動けってかw なんでintelのデベロッパマニュアル読まないの?
449 :
118 :2010/04/26(月) 20:34:37
>>448 文字サイズ=ポイント
1 pt = 0.352 778 mm
まじかるにゃんにゃんは良いよね〜
>>448 解像度には思いっきり影響されるだろ。
高解像度だとその分全体に占める割合が小さくなるし。
別にダイアログが勝手に大きくなったりはしないぞ。
それよりも、文字サイズ基準の関係でDPIの設定が反映されるのが特徴だな。
96から120にしてやれば、大きさもそれなりに広がる。
レンダリングの関係で120にしたら文字が切れてしまうのもよくある話w
451 :
448 :2010/04/26(月) 20:53:08
ダイアログの大きさは、どの解像度でも一定な文字サイズを基準に取ってる。 だから解像度の違いにより、ダイアログの大きさが崩れることなく表示できる。 ダイアログの大きさは一定なので低解像度だと画面をはみ出して表示されないことがある。 ----- x には X座標、y には Y座標をそれぞれ ウィンドウのクライアント座標でダイアログの左上の位置を指定します とありますが こちらは解像度単位で、設定した値によっては始めからウインドウの端も表示されないことはあるんですか? どの解像度でも真中に表示するには使用しているPCの解像度を取得して2で割って SetWindowPos をすれば良いのでしょうか?
ど真ん中に出されたら邪魔くさくてしょうがない
>>451 WindowsSDKのリソースコンパイラの所に
リソーススクリプトの記述方法が全部書いてあるから。
>>452 エロビデオ見てて良いシーンで一時停止すると
再生の→ボタンが画面の真ん中に出て来て
邪魔をする漏れのプレイヤー
455 :
118 :2010/04/27(火) 02:26:21
○ O o と 。 ,. -ー冖'⌒'ー-、 思 ,ノ \ う / ,r‐へへく⌒'¬、 ヽ キ {ノ へ.._、 ,,/~` 〉 } ,r=-、 モ /プ?`y'¨Y´?ヽ?}j=く /,ミ=/ ヲ ノ /レ'>-〈_ュ`ー‐' リ,イ} 〃 / タ / _勺 イ;;∵r;==、、∴'∵; シ 〃 / で ,/ └' ノ \ こ¨` ノ{ー--、〃__/ あ 人__/ー┬ 个-、__,,.. ‐'´ 〃`ァーァー\ っ . / |/ |::::::|、 〃 /:::::/ ヽ た / | |::::::|\、_________/' /:::::/〃
tesst
Windowsのログイン時のパスワードを変更する プログラムて作成することはできますか? ハックとかではなく、自分のTOOL上からパスワード変更をしたいと考えています。
#include <lm.h> NetUserChangePassword()
459 :
118 :2010/04/27(火) 23:49:22
#pragma pack(push,1)
460 :
118 :2010/04/28(水) 10:34:52
ppp
SJISで表現できない文字を含むフォルダ、ファイル名をA系のAPIでアクセスしようと思ったら 8.3形式にしてアクセスするしかないんでしょうか?例えば , Andre (eの上に ' がつく文字)というファイルを FindFirstFile(便利な変換関数("Andre"), ...)としてアクセスする手段はないですよね。
>>461 8.3形式のファイル名はどうやって得るつもりなの?
GetShortPathName()を使うならUnicode版を使わなきゃならないし、
それが出来る環境ならそもそもA系APIを使う意味がないんじゃ?
仲介DLLからローカルフックでアプリの WM_KEYDOWN, WM_KEYUP を横取りして処理し、アプリには渡さないようにしたいのですが キーボードプロシージャからDLL側のスレッドに PostThreadMessage() すると なぜかアプリ側に WM_KEY* メッセージが素通りしてしまいます。 PostThreadMessage() で投げているのはユーザ定義メッセージなので、WM_KEY* とは全く無関係なはずだと思うのですが 何故こういうことが起こるのでしょうか?PostThreadMessage() はそういう仕様のものなんでしょうか? キーボードプロシージャのソースを示します。 DLL側で生成したスレッドはウィンドウを持ちませんが、事前に PeekThreadMessage(&msg, 0, 0, 0, PM_NOREMOVE) を呼んでいるので メッセージキューは生成されているはずだと思います。 -------------------- HHOOK hHook; UINT thread_id; // DLL側で生成したスレッドのID LRESULT CALLBACK KeyBoardProc(int code, WPARAM wp, LPARAM lp) { if(code < 0 || code == HC_NOREMOVE) return CallNextHookEx(hHook, code, wp, lp); // これを行うとなぜか WM_KEY* が素通りしてしまう // コメントアウトすると WM_KEY* は望み通り遮断される PostThreadMessage(thread_id, WM_APP+1, wp, lp); return TRUE; // アプリに WM_KEY* を渡さない } -------------------- 仕様上やむを得ないのであればメッセージキューに相当するものを自作しようかと考えているのですが 標準のメッセージキューで可能ならそれに越したことはないので、詳しい方の知恵をお借りしたいです。
PeekThreadMessage(&msg, 0, 0, 0, PM_NOREMOVE) は PeekMessage(&msg, 0, 0, 0, PM_NOREMOVE) の誤りです。すみません。
>>462 いちいち取得しなくても、ソースを書く段階で「最初から知っていた」というケースもある
汎用性はなくなるけど特定の業務に使うアプリなら決め打ちで問題ないこともある
466 :
118 ◆ayPjxbmM2c :2010/04/29(木) 12:22:36
SJISで表現できないから困ってるんじゃないのかと
468 :
118 :2010/04/29(木) 19:16:56
int i = 10; int * p = &i;//int型ポインタpにiのアドレスを代入する 簡単。 char str1[] = "abcde"; char * str2 = "abcde"; 上と下は同じでどっちを使ってもいい。
やばい、
>>468 見てちょっと可愛いと思ってしまった
468にツッコミたくて仕方がないが、それ以前になんでそんな書き込みをしたのか 気になってしょうがない。どこかの誤爆?
ただのキチガだから触れるな
118 はいろんなところで見かける
473 :
118 :2010/04/30(金) 02:24:22
474 :
118 :2010/04/30(金) 03:01:53
なんだこいつうぜえ
475 :
118 :2010/04/30(金) 09:58:59
ppp
476 :
118 :2010/04/30(金) 10:05:06
おはよう、おまいら。今起きたところなんで過去10時間の書き込みは全部偽物だぜ。
477 :
118 :2010/04/30(金) 10:57:54
漏れも偽者でつ
478 :
デフォルトの名無しさん :2010/04/30(金) 12:16:25
現在のIMEの状態を取得するAPIを教えてください。 指定したハンドルのではなくて、IME自体の状態を取得したいのですが
それ俺も知りたいが IMEってやっかいだよな 下手に関わるとwineでまともに動かなくなるし
480 :
デフォルトの名無しさん :2010/04/30(金) 12:48:47
今調べてたんだけど WM_IME_〜メッセージとかでどうですかね?
481 :
デフォルトの名無しさん :2010/04/30(金) 12:49:52
あ、ハンドルがわからないか・・・
482 :
デフォルトの名無しさん :2010/04/30(金) 12:50:39
レジストリかどっかにIMEの現在の状態って書いてないですか?
毎回レジストリなんかに書かれるとでも? ・・・本当に書かれてたら笑うが
IMEの状態を表示するツールなら知ってる
IME自体の状態って言うけど IMEの状態ってウィンドウごとに保持されてるんじゃないの?
IMEの状態を取得する方法がわからないから、IMEがONのままスリープすると、 復帰したときにATOKはおかしくなることがある。 MS-IMEも昔はおかしくなったんだけど、最近になってようやくきちんと復帰するようになった。
IMEの有効・無効なら、グローバルフックしてWM_IME_STATUSを捕まえるでおk
複数のウィンドウを用意してるなかで、片方が普段非表示なんだが もう片方がクリックされたら、クリックされたマウス上に表示するようにしてる それで、ウィンドウは両方ともダブルクリックに対応してるんだけど 片方がダブルクリックされると、最初のクリックでもう片方が表示、その結果WM_LDBLCLKが来ないんだが 綺麗な解決方法無いかな?
表示を遅延させてみるとか
>>488 試してみたけど、普通にWM_LBUTTONDBLCLKきたよ?
非表示のウインドウを表示させるコードに問題があるんじゃないの?
表示させるときにSWP_NOACTIVATEとか、SW_SHOWNA使ってる?
>>491 うぉぉぉ。有難う!
普通にSW_SHOW使ってました
493 :
デフォルトの名無しさん :2010/05/01(土) 23:44:22
GetWindowPlacement GetClientRect GetWindowRect の違いがわかりません。 どれも、領域の左上、右下の座標を取得することができるようですが・・・ どう違うんでしょうか?
調べろよw
495 :
デフォルトの名無しさん :2010/05/02(日) 00:11:33
回答できるほどの知識はないようですねw
センスなさすぎw
497 :
118 ◆ayPjxbmM2c :2010/05/02(日) 00:17:53
あるわけないだろ。
知識ないから質問するだけ無駄
ただのキチガだから触れるな
GetWindowPlacement - 通常、最小化、最大化の位置情報 GetClientRect - クライアント領域の位置情報 GetWindowRect - ウィンドウ領域の位置情報
GetWindowPlacement - 各ウィンドウ情報取得 GetClientRect - クライアント上に描画している矩形を取得 GetWindowRect - ウィンドウ上に描画している矩形を取得
502 :
118 :2010/05/02(日) 03:17:58
あなたは知らないのですか?
503 :
118 :2010/05/02(日) 08:58:19
<おみやげ>が<のらドワーフのさと>にあることを。
複数のウィンドウ(AとBと略)を最前面表示にしてるんだが Aは常に最前面、しかしBは更にAより最前面って出来ない?
可。
506 :
118 ◆ayPjxbmM2c :2010/05/02(日) 10:44:32
質問文にすでに矛盾があるんだが。
おれは読解力の無さに呆れた
509 :
118 ◆88ZPSwqsm6 :2010/05/02(日) 12:58:18
AをBのオーナーにしとけばいいな。
それだとオーナー関係にしないと駄目じゃない?
途中で送信してしまったorz オーナーにせずに解決策ってある?
それしかないとも言う。 アプリのメッセージボックスの自己主張が激しかった Win95/NT4.0時代の悪夢を繰り返さないための仕様。
>>504 適当なイベント(Activateなど)をトリガに
毎回EnumでZオーダーをチェックし
BがAの背面に回っていたら
A、Bの順にTopmostする
winapiで立方体の表示はできないの?
やろうと思えばできる。自分で計算して描画すれば。 DrawCube みたいな関数をイメージしてるなら、そんな物は無い
516 :
118 :2010/05/03(月) 04:19:42
>>514 3D->2D変換
typedef struct type3d {
float x,y,z;
} POINT3D;
typedef struct type2d {
float x,y;
}
void convert3dto2d(p3 *POINT3D, p2 *POINT2D)
{
float vp = 0.7;
p2->x = p3->x * (vp / p3->z);
p2->y = p3->y * (vp / p3->z );
}
517 :
デフォルトの名無しさん :2010/05/03(月) 04:56:57
↑ 何言語? 糞いい加減なレスすんなや、ボケ
あるゲームを解析したいと考えています どうやるかというとHPが100以下になったら回復アイテムを 自動で使うというものを作りたいです そこで、起動しているexeのメモリの内容を参照するAPIって 何があるのでしょうか?
坊やはお帰り
521 :
118 ◆1oKmZSIAF. :2010/05/03(月) 10:43:46
ReadProcessMemory()
いつから釣りだらけのスレになったのか 元からかw
\ ∩─ー、 ==== \/ ● 、_ `ヽ ====== / \( ● ● |つ | X_入__ノ ミ そんな餌で俺様が釣られクマ―― 、 (_/ ノ /⌒l /\___ノ゙_/ / ===== 〈 __ノ ==== \ \_ \ \___) \ ====== (´⌒ \ ___ \__ (´⌒;;(´⌒;; \___)___)(´;;⌒ (´⌒;; ズザザザ
特定のプロセスのみ、ShellExecute() のプログラムの検索パスを変更することは可能でしょうか? SetEnvironment() で path を新たに設定しなおして、その後 ShellExecute() を実行してみたんですが 古いパスしか見てくれないようで困っています
>>524 環境変数を継承するオプション無かった?なかったら、CreateProcessでごにょごにょする。
526 :
118 ◆4BcWhWACFc :2010/05/03(月) 18:06:47
なんか勘違いしてるような気がする。 もう少し具体的にやりたいことと、やってみたことを説明してみ。
524です notepad.exe とか memo.txt とかのファイル名が書かれたテキストファイルを読み 適当なタイミングでそのプログラムをShellExecuteで起動する32ビットアプリを作っています 64ビット環境下で動く時に、%SystemRoot%\Sysnative を優先して実行ファイルの探索パスとして使えると、 64ビット版のアプリが起動できるのではないかと思い実装を試みていました 多分、ShellExecute のパスを変えるには、親玉の explorer.exe の環境変数を変更しないとだめで、 そこを書き換えている期間は他のアプリにも影響が出てしまうのでこの方針はまずそうです 素直に64ビット版のShellExecuteのプロセスを用意しようと思います
528 :
118 ◆4BcWhWACFc :2010/05/03(月) 19:35:37
それ、環境変数関係ないだろ。フォルダリダイレクションだし。 素直に、フルパスで起動すればいいんじゃね?
実行ファイルだけならCreateProcessなどでフルパス指定で呼べばいいんですが memo.txt や a.bat のようなファイル名指定による ShellExecute でSystem32配下のアプリが呼ばれるときの挙動を変えたかったんです
530 :
118 ◆4BcWhWACFc :2010/05/03(月) 19:56:27
exe以外なら、FindExecutableで関連づけられたアプリを取得して、 必要に応じてSysnativeにパスを変えて、CreateProcessすればいいだろ?
おれの周りにも最近64がちらついてきた 面倒な世の中になってきたなあ
532 :
118 :2010/05/03(月) 20:12:45
>>530 これでいけそうです。ありがとうございます!
x86向けとx64向けの両方のバイナリをはき出すにあたって ソースコードを同一にする方法って言うか注意事項って言うか そういうのがまとまったサイトってないのかな。
これやらなけりゃ問題ない。 void* p; int a=(int)p;
536 :
118 ◆tfxvx8WXZ2 :2010/05/04(火) 13:42:38
ポインタサイズだけだからな・・・。
if (sizof(int) != sizof(int*)) { #error 無理です。 }
確かに常にエラー出るなw
x64でビルドしようかと思ってたけどノートパソで走らなくなるからx86にしたことがある。
ソースはともかくバイナリを同一にしたい 副次ストリームとか使ってなんとか一緒にできないものか foo.exe(32ビット版) が起動た時OSが64ビットだったら foo64.exe を呼び出す、みたいな間抜けなやり方しか思いつかん
>>541 PEフォーマットが複数バイナリを格納できない以上、それは無理ってもんでしょ。
543 :
118 ◆tfxvx8WXZ2 :2010/05/04(火) 22:08:22
>>541 SysInternalのツールとかは、そういう風にやってるね。
Visual Studio には spy ツールがありますよね あれって、たとえば、特定のEXEにあたっちすることまでは わかったのですが、 そのEXEが発行するAPIとか取得できるのかな? やりたいことは、 EXEがあり、このEXEは、Widnowsのハードウエアにかかわる DLL(API)を使っています。 このdevice.dll に対して、どのようなAPIが発行を要求したかしらべたいのです。
何故かコクヨのノートに書かれた夏休みの絵日記が浮かんだ
546 :
118 ◆uKObk31oqA :2010/05/04(火) 22:16:02
SPY++は、メッセージのやりとりを確認するツール。 API呼び出しを確認したければ、API Monitorかデバッガでアタッチ、 あるいは、ラッパ生成ツールでも使うことになる。 詳細はググレ。
>>544 昔、dependency walkerってのがあったけど、
今もあんの?
横から
>>544 を書き直すと、
今手元に、とある dll とそれを利用している exe があります。
この dll について、公開されている関数の中で、この exe が
今どの関数を使用しているかを知る方法はありませんか?
ご教示の程よろしくお願い致します。
こんな感じか
549 :
118 ◆uKObk31oqA :2010/05/04(火) 22:24:30
>>547 VSには含まれなくなったけど、フリーのやつが落とせる。
550 :
547 :2010/05/04(火) 22:40:32
Volume Shadow Copy Serviceを使って使用中のファイルのコピーをしたいのですが どこかに良いサンプルありませんか
今手元に、とあるWindows で準備されている、 dll とそれを利用している exe(他社開発 VisualC++で) があります。 この dll について、公開されている関数の中で、この exe が 今dllのどの関数を使用しているかを知る簡単な方法はありませんか? イメージ的には、他社開発のアプリ上のボタンを押したら、 どのDLLのどの関数を呼び出したかを知りたいです。 アプリ上にそういったトレースファイルをはく使用であればいいのですが、 そういう使用がないので、なんらかの方法で知りたいと思います。 ご教示の程よろしくお願い致します。
553 :
118 ◆uKObk31oqA :2010/05/04(火) 23:00:19
インポートリンクされてれば、Dumpbin /IMPORTS でインポートしてる関数はわかる。
何かをした時点で、ってことであれば、
>>546
554 :
デフォルトの名無しさん :2010/05/05(水) 01:40:43
>>546 >>553 >SPY++は、メッセージのやりとりを確認するツール。
>API呼び出しを確認したければ、API Monitorかデバッガでアタッチ
情報ありがとうございます。
API モニター等調べています。
Win32とは直接関係ないですが、上の”メッセージ”とありますが、
現在Visual C++ 2008 のフォームアプリを勉強しているのですが、
ほとんど、(昔のVBみたいで、)あまり、メッセージがでてきません。
この理由というのがいまいちよくわかってないのですが、なにかヒントありますでしょうか?
555 :
118 ◆uKObk31oqA :2010/05/05(水) 01:41:59
それは C++/CLI だからだろ。 普通にWin32アプリを作れば、嫌でも出てくるよ。
556 :
デフォルトの名無しさん :2010/05/05(水) 01:51:36
>>555 2ch、やっぱり、すごい、疑問がすぐ解決する。。
557 :
デフォルトの名無しさん :2010/05/05(水) 02:09:49
Win32 API /Win XP Sp3 での総数はいくらぐらいなのでしょうか? ネットでさがしてもわかりませんでした。 また、そのリスト等、ネットにありますでしょうか?
558 :
118 ◆1oKmZSIAF. :2010/05/05(水) 02:13:54
ない。
全部のヘッダ覗いて数えれば確実 ・・・そもそもどこまでを指してwin32APIと呼ぶのかって話もあるが
system32にあるdllの各エクスポート数を調べるとか
562 :
デフォルトの名無しさん :2010/05/05(水) 03:02:06
>560 :デフォルトの名無しさん:2010/05/05(水) 02:32:23 >system32にあるdllの各エクスポート数を調べるとか このDLLのエキスポート数についてもう少しわかりやすく解説願えないでしょうか? DLLはAPIを集めた、関数群であるあたり、までは理解しております。
563 :
118 ◆1oKmZSIAF. :2010/05/05(水) 03:11:55
とりあえず、Dumpbin /EXPORTS してみれば?
564 :
デフォルトの名無しさん :2010/05/05(水) 03:16:27
そもそもなんでそんなリストが必要なのかと マイクロソフト出版か何かが出してた鬼みたいな厚さのAPI本でも多分全部網羅はしてなかったような あと、箱入りVCにはレンガくらいの厚さがあるAPI本入ってるけど
DLLがエクスポートしていても、非公開扱いだったり、 APIといいつつ、単なるマクロでDLLではエクスポートされていない場合もあるよ。 諦めたほうがいい。
名前だけ分かっても手が出ないし DNSAPIとか
DnsGetCacheDataTableとかどこ探しても載ってないもんよ
まあ、非公開のエクスポートはあるだろう。 DnsGetCacheDataTable なんて、どう見ても内部向けだろうし。
そもそも非公開ってどうやって判別するのよ
ドキュメントも読まずに判断なんて出来ないと思うの そしてそれが何かの説明も読まずに使うバカはいないと思うの
573 :
118 ◆1oKmZSIAF. :2010/05/05(水) 21:25:31
ときたまいるけどね。MSDNを見ないで、どっかの素人サイト見てるようなやつ。
MSDNも日本語のサイトは糞だな 英語のMSDN見ないと話にならない
575 :
118 :2010/05/06(木) 02:30:04
>>574 お前K&Rも原著じゃないとっていうタイプだろ?
融通がきかない頭が固い
死後硬直かよ
>お前K&Rも原著じゃないとっていうタイプだろ? そのとおりです よくわかりましたね
英語版見た方がいいのは事実じゃないの 日本語版だとバッファサイズがヌル文字含むのかとか書いてないことがあるし
日本語版は、関数呼び出しに必要な構造体や関数ポインタ型へのリンクが なくて使いづらいんだよな。
WS_SIZEBOXだと境界線が出るんですが クライアント領域がサイズ変更可能で境界線を持たないウインドウはどうすれば作成できますか?
そういう場合はサイズ変更は自分でやる
他のウィンドウが自分のウィンドウに重なってるかを調べる方法って 定期的に列挙してZオーダーの確認するしかない?
Zオーダーの確認でも分からない場合があります
自分のウィンドウのZオーダー間、ウィンドウのスクリーン座標を取って被ってるかの確認かな 他のあるかい?
1ピクセルラインのリージョン採って無効確認
子プロセスを作る時に不可視で作るのはどうすればいい?
>>575 >>279-285 を読んでもそう言うなら*馬鹿*以外の何物でもない。
> 解説
> CreateFile が返したオブジェクトハンドルを閉じるには、 関数を使います。
質問です。 ファイルコピーをする場合、 ・fopen_s等で開いて、自力でコピー ・system("copy を使う があると思いますが、 エクスプローラーのコピーを、プログラムから気軽に使う方法はないでしょうか? ファイルのコピー経過(今どれくらいコピーが終わったか)などを表示するのが目的です。
588 :
118 ◆1oKmZSIAF. :2010/05/06(木) 10:14:42
>>585 綺麗な手では無理
どろくさくやるなら
CreateProcess → 戻りのプロセスID取得
ウィンドウ列挙して、GetWindowThreadProcessId でプロセスID取って一致したら
ShowWindow(SW_HIDE) する
こういう手順になるかな?
>585 関数を使います。
>>585 STARTUPINFOのwShowWindowにSW_HIDE指定すれば済む話じゃなくて?
ちなみに、プロセスが作成されて最初のShowWindowはSTARTUPINFOで
状態が指定されていれば、それが強要される。
594 :
118 ◆1oKmZSIAF. :2010/05/06(木) 15:37:16
その指定が有効にならないアプリはごまんとある、って話でしょ。
>>593 そのアプリが最初に呼び出すShowWindowがSW_DEFAULTだかなんだかっての指定してないと効かない
WinMain からいきなり DialogBox で窓駆動するようなのは STARTUPINFO 効かないんじゃないかな
As noted in the discussion of the nCmdShow parameter, the nCmdShow value is ignored in the first call to ShowWindow if the program that launched the application specifies startup information in the structure. In this case, ShowWindow uses the information specified in the STARTUPINFO structure to show the window. On subsequent calls, the application must call ShowWindow with nCmdShow set to SW_SHOWDEFAULT to use the startup information provided by the program that launched the application. This behavior is designed for the following situations:
>>595 SW_DEFAULTは関係ないよ。
nCmdShow
ウィンドウの表示方法を指定します。アプリケーションがほかのプログラムから STARTUPINFO 構造体を渡して起動された場合、初めて ShowWindow 関数を呼び出したときには、このパラメータは無視されます。
孫プロセスなら子プロセスのWindowStationを非表示にすれば
>>596 ダイアログベースのアプリケーションでも表示状態の指定はできるけど、
それとは別にダイアログベースのアプリケーションのメインウインドウは
不可視にできないという制限があるから、SW_HIDEは駄目かもね。
601 :
118 :2010/05/06(木) 19:29:30
この程度は読めなきゃAPI使ったプログラム書けんだろ
ウィンドウプロシージャ自身から UpdateWindow() を呼んだときの挙動ってどうなるんですか? たとえば、WM_KEYDOWN が来たら UpdateWindow() した場合は WM_KEYDOWN が来る ↓ UpdateWindow() を呼ぶ (A) ↓ WM_PAINT を引数としてウィンドウプロシージャが呼ばれる ↓ WM_PAINT を処理する ↓ WM_KEYDOWN の (A) へ制御が戻る という感じになるんでしょうか?
UpdateWindow() は内部的に 登録されたアプリケーション(クラス)に WM_PAINT を送信する >WM_PAINT を引数としてウィンドウプロシージャが呼ばれる のではなくて ウィンドウプロシージャにWM_PAINTメッセージが送信される WM_KEYDOWNへの処理には戻らない なぜなら WM_KEYDOWNメッセージはウィンドウプロシージャに送信されていない
CALLBACK が邪魔になっているであろう 単純に WinProc( MSG msg ) { switch( msg ) { case WM_PAINT: brea; case WM_KEYDOWN: break; } } と考えればよろし
>>604 でも、MSDNだと UpdateWindow() はメッセージキューを無視して WM_PAINT を送ると書いてありますよね?
ということは、WM_PAINT の処理が終わるまでブロックするんじゃないかと思うんですが、そうではないんでしょうか?
メッセージキューの先頭に WM_PAINT を入れるということですか?
ああ、勘違いしていた printf( でも試してみれば?
関連して InvalidateRect もある
>>603 半端な知識で出鱈目教えてる奴が来てるようだから、この時間のレスは信用しない方が良いよ。
失敗ばかり恐れ何もしない奴はだまってて
>>604 処理には戻らないって、関数が終わったら戻ってるじゃん
そういう事を
>>603 の(A)は言ってるんじゃないの?
UpdateWindow関数っていつから goto になったんだww
なんかごちゃごちゃ書いてるやつがいるけど 603はそんなこと聞いてないだろう。 処理が終わればWM_KEYDOWNの残りの処理に戻るだろ。 第一、戻らないと困るだろ。
gotoじゃねぇよ イベントドリブンだ どっちが半端な知識なんだろうね
人に聞かずにspy++用いて試せば分かるんじゃねーの?
メッセージ送信、受信のスケジューリングは保障されていない OSによる挙動が変わる可能性もある
603ですがこんなの書いて試してみました
http://codepad.org/iZGdWEcN "bar" が表示されるのは "UpdateWindow() start" と "UpdateWindow() end" の間だけなので、
どうやら UpdateWindow() はブロックするみたいですね。
WM_PAINT のハンドラ内で Sleep() した場合も "UpdateWindow() start", "UpdateWindow() end" の表示間隔が
明らかに長くなるので、たぶんブロックするのは間違いないんじゃないかと思います。
もしかしたら
>>618 さんの仰るように環境依存なのかもしれないですけど、
ブロックする環境がある以上は一応それを考慮しようと思います。色々ありがとうございました。
>>619 のコードが一部抜けちゃいましたが
グローバル変数として
const char* p = "foo";
と最初に定義しています。
>>616 いつから gotoになったんだって一文がどういう意味かわからないのか
どっちが半端な知識なんだろうね、じゃねぇよびっくりするぐらい頭悪いなお前
あまりにもレベルが低すぎて文章を解読できませんでした
いろいろ交錯しているけれど、最初に戻ってみれば単純な事。
>>604 はびっくりするほど頭が悪い。これが真実。
>>619 614ですが、
ブロックなんていう問題か?
自分でメッセージキューから一個一個取り出して処理してる最中だからだろ。
(UpdateWidow()はキューを通さない)
>>624 MSDNにもありますが「キューを通さない」というのがどういう意味なのかよくわからなかったんです。
Windowsのメッセージキューについてはあまりよく知らなかったので。
WM_PAINTの処理が終わるまでブロックするのか、メッセージキューの先頭にWM_PAINTを割り込ませるのか、
それとも別にスレッドを作って処理するのか、などと考えてました。
キューにある WM_KEYDOWN を引っ張ってきて CALLBACK 開始 CALLBACK内 UpdateWindow() 呼ぶ CALLBACK終了 次にキューに溜まっているメッセージを引っ張ってくる キューを通す場合: キューにある WM_KEYDOWN を引っ張ってきて CALLBACK 開始 CALLBACK内 UpdateWindow() のようなものを呼ぶ → キューに WM_PAINT を割りこます (PostMessageみたいなもの) CALLBACK終了 次にキューに溜まっているメッセージである WM_PAINT を引っ張って CALLBACK 開始 キューを通さない場合: キューにある WM_KEYDOWN を引っ張ってきて CALLBACK 開始 CALLBACK内 UpdateWindow() のようなものを呼ぶ お膳立てして CALLBACK を再帰呼び出し CALLBACK内(2) <WM_PAINT 処理> CALLBACK終了(2) CALLBACK終了 おおざっぱにこう違う
WM_PAINTは「sent」されるので、その説明はダメ。
628 :
118 ◆4BcWhWACFc :2010/05/07(金) 01:14:02
sentされる、ってなんだよw
>>118 日本語版msdnしか読まない馬鹿は引っ込んでろ。
630 :
118 :2010/05/07(金) 02:28:00
呼んだ?
631 :
118 :2010/05/07(金) 04:45:31
gccしかしらないアホがいます
答えているのを見ると それをバカにして自分があたかもそいつより上だという優越感にひたりたいです
私は選ばれし者です 下等生物のあわれなやりとりを見ているととても胸がスーッとし 自分より以下の存在を確認することによって自分の存在がとても尊いものだと認識させられます
具体的な話だけをチョイスして読んで、あとは気になるレスをヒントに自分で掘り下げて 実験するようにすれば脂身の多いスレであっても正解に辿り付けるから大丈夫
ツールチップが表示された後に、キー入力とかが在ったら 表示したツールチップを消したいんだが、ShowWindowで消すのは駄目だよね? TTN_POPとか受け取りたいから、うまい消し方在ったら教えてください
一つのウィンドウ上に、別のウィンドウが重なっているかを スクリーン座標から判定したいんだが 簡単に判別する方法無いかな? UnionRectとか使ってみたけど、どうもうまくいかない
>>639 どっかで同じ質問してる香具師がいたな
マルチか
Zオーダーとスクリーン座標の両方を調べないと、重なっているかどうかはわからないのでは
645 :
デフォルトの名無しさん :2010/05/07(金) 23:38:41
カンマ付き数値 123,456みたいにするAPIを教えてください。
646 :
118 ◆4BcWhWACFc :2010/05/07(金) 23:44:35
wsprintf()
647 :
デフォルトの名無しさん :2010/05/07(金) 23:46:17
>>646 あれー?
それでできるんですか!!
すんまんせん。書式はどうやって書けばいいのですか・・・
648 :
118 :2010/05/07(金) 23:51:21
649 :
デフォルトの名無しさん :2010/05/07(金) 23:53:08
んじゃ軽くてカンマ付き数値できるAPIをさっさと教えて
cout
651 :
デフォルトの名無しさん :2010/05/07(金) 23:57:14
知らないならレスするなよクズ
652 :
118 ◆4BcWhWACFc :2010/05/08(土) 00:00:03
あれ。wsprintf() じゃダメだっけか?
653 :
118 :2010/05/08(土) 00:04:13
>>649 char *konma3(int m)
{
char s[274];
char e[277];
wsprintf(s, "%d",m);
m=0;
while(*s){
*e++=*s++,m++;
if (m%3) *e++=',';
}
return e;
}
>>639 使うならUnionRectじゃなくて、IntersectRectじゃないのか?
GetNumberFormat()
軽くはないけど
>>645 のためのAPIって無かったっけ?
言語設定に従ってフォーマットするやつ。
657 :
デフォルトの名無しさん :2010/05/08(土) 00:13:40
wsprintfでできれば一番いいんだけど 簡単なのない?
658 :
デフォルトの名無しさん :2010/05/08(土) 00:14:39
GetNumberFormatもめんどくせえなあ
659 :
デフォルトの名無しさん :2010/05/08(土) 00:37:47
早く教えろよ
あるウィンドウ(A)にアクセラレータキーを設定し、 Aが最前面に無い状態で設定したキーが押されても Aで受け取って処理出来るようにするには、 キーボードフックしか方法はありませんでしょうか?
661 :
118 ◆4BcWhWACFc :2010/05/08(土) 01:51:35
最前面 != フォーカスを持っている、だから、フォーカスさえ持ってれば 処理できるよ。 フォーカスがない、ってことであれば、ホットキーかフック。
>>660 while(1)でキー監視したり
RegisterHotKeyで登録したりかな
663 :
660 :2010/05/08(土) 02:04:41
最前面とフォーカスを勘違いしていたようです。 RegisterHotKey()を試してみたいと思います。 わかりやすいご説明ありがとうございました。
NSISとinno Setupのスレッドありませんか
665 :
118 :2010/05/08(土) 03:35:43
>>661 得意げに !=←使うやつってなに?
俺Cとかできるの、すごいでしょ!ってアピールしてんのw
Cは業界標準なので。趣味じゃないので。
屁が出る
668 :
118 :2010/05/08(土) 05:32:10
≠のほうが分かりやすい
670 :
118 :2010/05/08(土) 08:07:59
!=よりこっちががわかりやすいです>< 10 IF 1<>2 THEN GOTO 0
!=がわかりやすい
672 :
118 :2010/05/08(土) 08:32:36
>>671 絶対わかりにくい。
10 A=10:B=5
20 IF A!=10 THEN B=A
30 PRINT B
RUN
10
OK
■
私は選ばれし者です != という記号を使っている低俗な愚民どもを見るのは 私の理想論からおおきくはずれ、おろかな記号表現は滅されるべきだ
<>と!=が同じ意味のPHPは空気の読める子
A.exe (GUIアプリ:他人作成) から B.exe (コンソールアプリ:自分作成) が起動される仕組みになっていて、 A.exe とのやりとりに B.exe の標準入出力が占有されている場合 B.exe 側が単独でコンソールウィンドウを開いて文字出力する方法を教えてください。
676 :
118 ◆MNk6ialHnk :2010/05/08(土) 10:47:24
AllocConsole関数のリファレンスを見る限り無理じゃない?
677 :
675 :2010/05/08(土) 11:26:20
>>676 そうですか。
ウィンドウを生成して(リッチ)エディットコントロールの利用を検討してみます。
ありがとうございました。
別にウインドウ作るよりは単独でコンソールウィンドウ開く方が簡単そうに思うけど
不可視での起動方法を聞いた
>>585 です。
無事にStartupInfoを使って不可視での起動が出来ました。
ありがとうございました。
>>677 別にコンソール作らんでも、使われてないコンソールを使えば?
CONをOpenFile
>>679 非表示のことだったの
スレッドAが変数iをインクリメントして、スレッドBがそれを読み取る場合、InterlockedIncrement()は必要ですか? 素人考えでは、インクリメント中にスレッドBがiを読んだとしても、 読み取られる値はiまたはi+1にしかならないはずなので、普通に++iで問題ないだろうと思ったのですが
べ、べつにウィンドウを登録するなっ! なんて言ってないんだからねっ!!
どうしたの?
>>681 その条件で、その値に関してだけなら問題無い。
スレッドBからアウトオブオーダーに絡むような参照をするなら話は別だけど。
例えば、iが+1されているなら、どこどこの変数は既に更新済みのはず、とか。
>>684 マルチスレッドど素人なので、いろいろ調べてきました
InterlockedIncrement()はメモリバリアを生成するってMSDNに書いてありますね。
スレッドAで
hoge=1; ++i;
みたいなことをすると、書いた順番に実行されるとは限らないから、hogeをスレッドBで参照するのはまずい、ということでしょうか。
それだと多分まずそうなので、InterlockedIncrement()を使うことにします。ありがとうございました。
686 :
675 :2010/05/08(土) 19:12:50
>>678 >>680 >>682 も?
CreateFileでCONOUT$を指定してハンドルを取得し
WriteFile/WriteConsoleを利用することで
希望通りの動作をさせることができました。
ありがとうございました。
687 :
デフォルトの名無しさん :2010/05/08(土) 19:52:40
ファイルの存在を調べたいんだけど、 fopen_s で開いて開けたらOKってしてたら、 別プロセスでロックされているとエラーが返ってきてしまいました。 何とかOKで返すロジックを組みたいんですが、 何かいいAPIなり応用なりを教えてエロい人!!
FindFirstFile
690 :
118 ◆X4wDaRuYzw :2010/05/08(土) 20:05:10
PathFileExists
691 :
687 :2010/05/08(土) 23:06:43
>>688 なるほど、Find系APIもあった!
>>689 , 690
PathFileExists!shlwapi.h は見なかったなぁーthx!!
692 :
デフォルトの名無しさん :2010/05/09(日) 01:49:50
VS2008にてマウスの右クリックをフックするプログラムを作成しています。 SetWindowsHookEx()を使用してWM_MOUSEをフックするDLLを作成し、 作ったアプリはWindows7では特に問題無く動作しますが、XPでは実行ファイルから起動すると 画面がフリーズしたような状態になりログオフするまで直りません。 ただし、XPにてVSのメニュー、デバッグ開始またはデバッグなしで実行から 起動した場合、なぜかフリーズしたような状態にはなりません。 何が原因なのでしょうか? 正直Windows7を今後メインで使うから別にいいじゃんと逃げたくなってきていますが・・・
7専用アプリでいいよ どうせ俺は使わないし
>>692 7専用でいいよ
XPだけど使わないから
>デバッグ開始またはデバッグなしで実行から >起動した場合、なぜかフリーズしたような状態にはなりません リリースとの構成の違いをつぶさに観察してみるとか、 あとあほみたいだけど、OSに処理返してる所がちゃんと書かれてるかも一応流れ確認するとか
バグがあるプログラムが特定の条件下でまぐれで動く事は良くある事。 そんな常識もしらない素人が作るプログラムは他人は使わないから、7専用でいいよ。
VSから起動って、Release版でもそうなるのか?
>692 多分Lunaのバグが原因。
699 :
692 :2010/05/09(日) 12:27:24
>697 Release版でもDebug版でも実行ファイルから起動するとフリーズ状態になります。 VS経由じゃなくても、例えばOllyDbg等のデバッガ経由して起動した場合問題無い >697 何らかのバグがあるのは分かりきっていますが、 意図通りに動く条件がこれまで見たことが無いものなのでバグの特定方法が分からず アドバイスを求めました・・・
真面目にそれはちょっとソース見ないとわからないかも いやマジで
メモリ破壊してるのかもしれない Win7使ったりデバッガ経由したりしたら XP直とは多少メモリの配置が変わって 問題なくなるとか
702 :
692 :2010/05/09(日) 13:45:39
原因は依然分かりませんが、逃げる方法だけは見つけました。 フックをかけるところで下記のようにWH_MOUSEのみをフックしていましたが、 ::SetWindowsHookEx( WH_MOUSE , (HOOKPROC)CMouseHook::MouseProc , GetThisHInst() , 0 ); WH_GETMESSAGEをフックするように変更し、 プロシジャーのなかで右クリックイベントの判定を行うように変えたらフリーズは 無くなりました。 とりあえずこれで問題無くなりましたが、根本原因が分からず気持ち悪いです・・・
現象が再現できる最小のコードを見つけるといいよ
704 :
デフォルトの名無しさん :2010/05/09(日) 16:39:38
早く教えてくれ
>>701 FTHはまぢいらねー
なんであんな機能増やした
707 :
デフォルトの名無しさん :2010/05/09(日) 17:26:57
ぐだぐだほざいてねーでさっさとおしエロよ
FTHってなんだ
Fault Tolerant Heapだろ Windows7から入ったメモリ破壊監視機構
すげぇけど無駄な機能
712 :
692 ◆CIlmPyxysI :2010/05/09(日) 18:06:55
Fault Tolerant HeapをDisableにしてみましたが、Win7では意図通りに動きました。 Vistaでも動いたからこれが直接の原因ではないようです。 メモリ破壊の可能性はまだ否定できませんが・・・ ちなみに704と707は自分ではないです
ネットで他人の書いたコードを見てると ::MessageBox() みたいにコロン2つを付けてることがありますが、これはどういう意味なんでしょうか? 大域関数だよ、ってことを明示したいってだけですか?
>>713 MFCで大域関数じゃないMessageBox()があるんだ・・・
>>714 MFCですか!使ったことないので全然気付きませんでした。ありがとうございます。
今後使うハメになるかもしれないので、一応コロン付ける習慣をつけておこうと思います。
あるいはVisual Studioのインテリセンスなど補完機能使うために::を打っているという場合もある。
引数の数が違うけどな。 普通はAfxMessageBoxの方を使うし。
719 :
118 :2010/05/10(月) 20:16:48
なんで足フェチは足を舐めるんだろう 手フェチは手を舐めるんだろうか 鼻フェチは鼻をなめるんだろうか 足フェチだけじゃね? 舐める欲求が強いのわ
俺は指なめられるの好き
ナデナデシテー
放置プレイフェチは放置を舐める
723 :
デフォルトの名無しさん :2010/05/12(水) 17:56:26
UDP通信なんだけど、1つのPCでソフトを2つで同じポート使って 通信ってできますか? 当然ながら後に立ち上げたソフトはポートのオープンに失敗するんですが
Windows7 64bitの環境で動作するDirectShow/MediaFoundation対応の メディアプレイヤーを作ろうとして、下調べをしているのですが、 .tsや.flv/.swfを再生させるTopology/Filtergraphの構築方法がわかりません。 topoedit/grapheditどちらでもグラフが構築できないようです。 WMPは何をやって再生しているのでしょうか?
>>723 Loopback Adapterの追加でやれた気がするけど詳細忘れた
名前を変えて複数入れるとかだと思う
726 :
デフォルトの名無しさん :2010/05/12(水) 18:40:08
727 :
118 :2010/05/12(水) 23:23:40
>>726 IPアドレスになってオマエの家に忍び込みたいヨォぉ
728 :
デフォルトの名無しさん :2010/05/13(木) 09:37:47
>>725-726 普段は2台のPCで親、子のソフトで通信してますが
これを1台のPCで親と子ソフトを起動して通信させたいのですが
729 :
726 :2010/05/13(木) 09:41:51
>>728 俺はもう面倒だから回答しないけど
だれか親切な人が教えてくれるだろう
>>723 >1つのPCでソフトを2つで同じポート使って通信ってできますか?
無理
分からないなら答えないでください うざいだけです
732 :
デフォルトの名無しさん :2010/05/13(木) 09:52:41
ポートが1234だとして 127.0.0.1:1234 と 192.168.xx.xx:1234 で通信出来ないか?
734 :
デフォルトの名無しさん :2010/05/13(木) 10:15:14
>>733 socketで作成したハンドルをバインドする時にすでにポートが他で開かれていたらエラーになるんですが・・・
他のやり方するんですか?
分からないなら質問しないでください うざいだけです
先にワイルドカードでバインドされたポートでも、IPアドレス指定すればバインド出来る。
737 :
デフォルトの名無しさん :2010/05/13(木) 10:25:49
>>735 みもふたもないこといわないでよ><
>>736 何やら光が見えてきそうです。
すんません。ワイルドカードでバインドはどうやってやるんですか?
738 :
デフォルトの名無しさん :2010/05/13(木) 10:47:26
>>736 ワイルドカードってIPのことですよね?
何かサックリできた気がしますが、
あとにワイルドアレを指定して開いてもbindでエラーにならなかったですが
>>733 すんません。意味わかりました。
bindするときってアドレスはANY指定だったんですが
これが重要だったんですね。これをアレしたらできました。
739 :
デフォルトの名無しさん :2010/05/13(木) 11:12:42
あ、よくよく考えたら重要な問題がww これ確かに先に127.0.0.1の1234でアレして、 次に192.168.1.10の1234でアレはうまくいったのですが これsendtoすると自分で取っちゃうつーアレが・・・ うーん、この辺の仕組みってどうすれば・・・
>これsendtoすると自分で取っちゃうつーアレが・・・ だから無理だって言ってるだろ
742 :
デフォルトの名無しさん :2010/05/13(木) 11:20:17
>>740 でもヒントになったありがとう
>>741 いや、できますた。
127.0.0.1でアレした方は192.168.1.10に送信し
192.168.1.10でアレした方は127.0.01にアレしたらあっさりでけますた。
もしやとおもってやてみたけどできてよかた。
っていうか、この方法なら従来のロジックを変えることなくできるからこれいいわあ〜
あー、こんな方法があったなんて知らなかったほんとみんなありがとう。
面倒臭いから一方を仮想マシンの中で実行しなよ。
744 :
デフォルトの名無しさん :2010/05/13(木) 11:26:17
>>743 そうやって逃げてばかりじゃダメなんだって!!
つーか、更に問題発生
ブロードキャストがうまくいかん
127.0.0.1の方はブロードキャスト受け取れないどうしよう
解決策? @ブロードキャストされたデータを受け取ったら127.0.0.1宛てにコピーして送信 ANICを2枚挿してリンクローカルじゃないプライベートアドレスを2つ作る B諦める
SO_REUSEPORT
747 :
デフォルトの名無しさん :2010/05/13(木) 11:44:01
>>745 @PC1台で2つソフトをアレしてはいますが、更に他にPCあってそっちにも子ソフトがいるので
これやっちゃうと、数人が127.0.0.1に送ることになるのでNG
Aハード的な対策はNGなんですよ・・
B(´・ω・`) ショボーン
っていうか、今回に限り127.0.0.1は親としアレすると
ブロードキャストは受けなくても問題はないから諦めるって方向になりますが
(親はブロードキャスト出すだけなので)
子は出すし受け取るので今回のアレではアレです。
しかしながら今回の実験で同じPCで同ポートアレができることがわかったのは大収穫です。
ほんとありがとう
スレチ
自分がバカだってことを全世界に晒してしまって、おかしくなってるんでしょう。
750 :
デフォルトの名無しさん :2010/05/13(木) 13:40:38
知らないくせに煽る事しかできない馬鹿に言われたくねえww
知ってるくせに解決できないキチガイに言われたくねぇww
752 :
デフォルトの名無しさん :2010/05/13(木) 13:43:28
お前のついてけない話題になったからって僻むなよ みっともねー奴だなあ
いいから黙れ馬鹿共。スレチだっつってんだろksg
仮想NICでアレコレ手を考えてた俺
755 :
755 :2010/05/13(木) 15:22:27
アイコンエディターを作りたいんですが、 編集した画像をどうやってアイコンファイルとして作成できるんですか? なんか便利なAPIが用意されてたりするんでしょうか?
機能自体はGDI+にあるはず
>>747 が
>>723 >>118 と同一人物として
文面からしか判断できないので間違っている可能性の方が高いが,,,
もう少し他人の労力に対して感謝の意を表す努力をした方が良い。
あなたがどの程度の前提や考察をしたうえで、質問をしているかは
読み手には書いてあること以上は判らない。
前後のやり取りを見るとそれなりの知識はあるようだが、あなたの質問に対して
100%最適化された答えが返ってくる保証もなければ、その前提となる条件が
全て明示されている訳でもない。
個々の使用条件でも、どの性能を優先するかによって構成や安全率の
取り方は変わってくる。
論理上無駄でも、安全や人間の犯しやすいミスに対する保険などに対する考え方
の違いで設計が変わったとしても何の不思議も無い。
実際の設計は、あなたが考えているほど単純明快ではないよ。
↑この辺のバカは別人だと思う
760 :
118 :2010/05/13(木) 19:05:21
/) ///) /,.=゙''"/ / i f ,.r='"-‐'つ____ こまけぇこたぁいいんだよ!! / / _,.-‐'~/⌒ ⌒\ / ,i ,二ニ⊃( ●). (●)\ / ノ il゙フ::::::⌒(__人__)⌒::::: \ ,イ「ト、 ,!,!| |r┬-| | / iトヾヽ_/ィ"\ `ー'´ /
761 :
デフォルトの名無しさん :2010/05/13(木) 22:17:57
PCに接続されているusbカメラの名前を 全て取得したいのですが、どのような関数を使えばいいのでしょうか? どなたか分かる方おられましたらよろしくお願いします。
762 :
118 :2010/05/13(木) 22:33:51
>>761 SetupDiEnumDeviceInterfaces
763 :
デフォルトの名無しさん :2010/05/13(木) 22:35:15
EnumlateConnectedByUsbOnMyPersonalComputer じゃダメかしらん?
nagee-----------------
何のジョークかと思った
766 :
761 :2010/05/13(木) 22:49:56
>>762 >>763 ありがとうございます!
早速使い方を調べて使ってみたいと思います。
EnumlateConnectedByUsbOnMyPersonalComputer
もググって調べてみたのですが、ヒットしませんでした。
色々調べてみます。
767 :
118 ◆X4wDaRuYzw :2010/05/13(木) 22:54:58
enumerate だし。
なんだジョークなのか
769 :
118 :2010/05/13(木) 23:39:58
おめエラーうぜええええええええ 審問に答えないカスどもどっかいけよ!!!!!!!! 雑談はなれ合いはラウンジでやれーーーーーー マイタじゃねえんだよここゎ ボケがえ^^^^^^^^^ 沢村以下だな !
だれ猫(第44講座)そのままコピってコンパイルしてたんだが、 brc32 sdk44.rc sdk44.exe を実行すると Error sdk44.rc 10 42: Expecting END って出る。brc32ではリンクしてくれない場合があるらしいから brcc32からやってみたが、同じエラーが出る。 リソースファイルは以下 06MYPOPUP MENU DISCARDABLE 07BEGIN 08 POPUP "表示されません" 09 BEGIN 10 MENUITEM "終了\tShift + Ctrl + X", IDM_END 11 POPUP "オプション" 12 BEGIN 13 MENUITEM "猫の絵\tF1", IDM_CAT 14 MENUITEM "犬の絵\tF2", IDM_DOG 15 MENUITEM "ネズミの絵\tF3", IDM_RAT 16 MENUITEM "消去\tEsc", IDM_CLR 17 END 18 END 19END ヘッダーは、 #define IDM_END 100 (以下省略) 聞きたいのは、1) brc32が悪いのか、だれ猫の間違いなのか? 2) きちんとリンクできる別の方法はあるか?(統合環境を使うなど)
沢村懐かしいな お前そんな頃からいるのかよ
ヒント: 118は一人ではない
ビットマップについて質問させてください。 16ビットのビットマップを作成しました。 これに対して、赤色(255,0,0)のブラシとペンでRectangleで描画したとします。 このときピクセルにセットされるのはメモリを見ると007Cでした。 この値を描画する前に知る手段はあるのでしょうか? 自前で計算と思ったのですが、16ビットで描画されるとき RGBが555なのか565なのか変わる場合があるのか自分にはわからないので 質問させていただきました。
777
自分でビットマップを作成したので、BITMAPINFOHEADERについて もう少し調べた方がよさそうです。失礼しました。
777
777
779 :
デフォルトの名無しさん :2010/05/14(金) 15:17:17
そろそろUDPでsrcポートとdstポートを逆にして送る方法教えてくれよ
C++ の本かって、WinMain とウインドープロシージャの構成、主にWin32プログラムを見ながら勉強しております。 フォーム上のボタンをおしたら、リストボックスに処理結果等の文字列を表示させたいと考えています。 ボタンを押したらというのは、 そこで、メッセージを拾えばいいと思うのですが、リストボックスに表示させるには具体的にどうやればいいのでしょうか?また、こういったPGは、MFC等を使うのが、一般的なのでしょうか?
GetWindowText(hEdit, szBuf, 64); SetWindowText(hEdit, ""); こんなんでよければ
GUIアプリ作りたかったらC#にしようぜ 今からC++&Win32APIなんてマゾすぎる
RES ありがとうございます。 私は、VB等ならわかりますが、C#は使ったことがありません。 やりたいことは、Windowsが用意しているDLL 内の関数を使って、制御したり するプログラムです。ただし、Windows のフォームアプリとして作りたいと 思っています。例えば、外部から、そのデバイスに接続があれば、フォーム上で通知したり、フォーム上のテキストボックスに入れた値を用いて、デバイス に値を渡して、通信させるといったプログラムです。 こういったPGの場合、vb とC#を比べた場合どちらが優れているでしょうか?
785 :
118 ◆X4wDaRuYzw :2010/05/15(土) 21:04:09
どちらにせよスレ違い。VB or C#スレに行け。
>>784 Windowsが用意しているwin32API関数群を使って何かしたい、
そしてウィンドウはフォーム(ダイアログ)形式でって話ならば、例えば
Visual C++ 2008 Express か、 2010 で、かつ フリーウェアの ResEdit を使って
ダイアログとして作ってしまうって手がある。 CreateDialog 関数を使って基本的なウィンドウを作り、
コントロールをリソースとして配置してしまえば、若干コーディングを省略できて、かつ GUI で各種コントロールを配置できて楽。
ちなみに、C# や VB で win32APIを呼び出す事も出来るけど、そんな事するくらいなら
上記方法で VC++ 使ってやっても特に難しい事は無いぜ。 ・・・ただし C++ が普通に理解出来ている事が大前提だけど
>>786 > フリーウェアの ResEdit を使って
>ダイアログとして作ってしまうって手がある。 CreateDialog 関数を使って
>基本的なウィンドウを作り、
>コントロールをリソースとして配置してしまえば、若干コーディングを省略>できて、かつ GUI で各種コントロールを配置できて楽。
貴重な実践的なテクニックについて教えてもらい感謝です。
>ちなみに、C# や VB で win32APIを呼び出す事も出来るけど、そんな事する>くらいなら
>上記方法で VC++ 使ってやっても特に難しい事は無いぜ。
VB,VC比較した、開発のイメージがなんとなくつかめました。
SetEvent(),ResetEvent()でシグナル、非シグナル状態に変更しています。 今、カーネルオブジェクトがシグナルか非シグナルの状態を取得する方法ってどうすればいいでしょうか?
WaitForSingleObject
790 :
788 :2010/05/17(月) 11:27:35
>>789 返信ありがとうございます。
こういう感じでしょうか?
DWORD nRet = WaitForSingleObject(hSignal,0);
if(nRet == WAIT_OBJECT_0) {
//シグナル状態
}
else if(WAIT_TIMEOUT) {
//非シグナル状態
}
それで合ってる
Windows7でウィンドウがスナップしてるかどうかって、どうやって調べるんでしょうか? また、ウィンドウをプログラム側からスナップさせるにはどうすればいいんでしょうか? 検索してみたけどユーザー向けの説明か、無効にする方法ばかりで・・・
むり
つーかスナップって何のこと?
796 :
デフォルトの名無しさん :2010/05/17(月) 15:13:07
>>795 ウインドウをドラッグして・・・
マウスカーソルを画面上端へくっつける 最大化する
マウスカーソルを画面右端へくっつける ウィンドウが画面右半分のサイズになる
マウスカーソルを画面左端へくっつける ウィンドウが画面左半分のサイズになる
ウィンドウの端をドラッグして・・・
マウスカーソルを画面上端・下端へくっつける 縦方向だけ最大化する
それぞれの状態から、ウィンドウをドラッグして動かすと元のサイズに戻る
下げ忘れた…
ありがとう 要するに7の機能なのね 利点がさっぱり判らんけど
スナップと言うとウィンドウが画面端に吸い付くのを指すと思っていたが 7だとなんかよくわからん機能になってるんだな
そういうのって隠しスタイルビットとか立ってるんじゃね? spyで調べるとか
ShowWindowにフラグ追加してくれればよかったのにな
GetCurrentHwProfile()で取得できるGUIDは実行する毎に値が変わりますか?
803 :
793 :2010/05/18(火) 02:34:36
>>803 Win7入れてないから詳しくないんだけど
>マウスカーソルを画面上端へくっつける 最大化する
と
従来の最大化がイコールで
>ウィンドウをドラッグして動かすと元のサイズに戻る
という仕様なら
GetWindowPlacement
SystemParametersInfo
GetWindowRect
あたりのAPIを使って対処はできると思う
そうでないなら別のフラグを持ってるという事なので
Win7拡張APIのヘッダに
locとかposとかマッチしそうなワードでGrepしてみるといいかもね
特定のアプリケーションに「F12キーを押す」というメッセージを送信したいです そこで、SendMessage()関数がありますが、 その特定のアプリケーションのHWNDハンドルをどうやって取得したらいいでしょうか?
特定のアプリケーションのThreadIDを全て取得しEnumThreadWindows
EnumWindows
FindWindowを見つけたので char cls[256] = "ストップウォッチD"; HWND hwnd; hwnd = FindWindow( cls, NULL ); としても hwnd には 0 が代入されます 何が原因なのでしょうか?
>>808 クラス名が違うんじゃね?
GetLastErrorで何がおかしいか調べろ
トップレベルではない セッションが異なる
セッションってなんぞ?
HWND hwnd; UINT msg; WPARAM wParam; LPARAM lParam; char cls[256] = "notepad"; hwnd = FindWindow( cls, NULL ); msg = WM_CHAR; wParam = VK_TAB; lParam = 0; SendMessage( hwnd, msg, wParam, lParam ); ノートパッドではうまくいきました 次にタブキー入力を送信したいのですが またうまくいきません
msg = WM_KEYDOWN にも変えましたがうまくいかないです
>>813 英語のMSDNをよく読むと、SendされるメッセージとPostされるメッセージが
明確に区別されている。
どっちで送っても平気なメッセージもあるが、WM_KEYDOWNはPostしないと駄目。
(TranslateMessageの都合があるので)
hwnd = FindWindow( cls, NULL ); EnableWindow( hwnd, true ); msg = WM_KEYDOWN; wParam = VK_TAB; lParam = 0; // SendMessage( hwnd, msg, wParam, lParam ); PostMessage( hwnd, msg, wParam, lParam ); アクティブにしPostしてみましたが、ダメでした
アクティブにしてもいいならSendInputを使った方が
SendInput
818 :
118 :2010/05/18(火) 12:03:30
おまえらまだAPIつかってるのか いい加減anci準拠のプログ作れよww
msg = WM_CHAR; wParam = 0x00000061; lParam = 0x001E0001; PostMessage( hwnd, msg, wParam, lParam ); msg = WM_KEYDOWN; wParam = 0x00000041; lParam = 0x001E0001; PostMessage( hwnd, msg, wParam, lParam ); msg = WM_KEYUP; wParam = 0x00000041; lParam = 0xC01E0001; PostMessage( hwnd, msg, wParam, lParam ); SPY++ 使ってそのままの値をコード化したのですが、想定どおりにいかないです SnedInput もどうやって そのキーをアプリケーションに送るのでしょうか?
UINT SendInput( UINT nInputs, // 入力イベントの数 LPINPUT pInputs, // 挿入する入力イベントの配列 int cbSize // 構造体のサイズ ); のINPUT構造体ってなにをインクルードするんでしょうか? windows.h インクルードしてるんですが、コンパイルエラーでして
なんかそろそろ釣りでした。とか言い出しそう
#define _WIN32_WINNT 0x0500 定義したらいけました ありがとうございました
ちなみに 118 とは別人です データベース乙というか張り込み乙としか
WM_*使う方法ではダメなの? SendInputでできてもあんまうれしくないんだけど
何がしたいのか分からないけど SendMessage( FindWindowEx(FindWindow("notepad",NULL),NULL,"Edit",NULL), WM_CHAR,VK_TAB,NULL); じゃだめなん?
805じゃないけどできた 805がアホなだけだと思う
で?
質問です アプリ起動時に指定されたDLLが必要なんですがどこにおけばいいんですか? いつも実行ファイルと同じ場所にコピーしておいています
DLL 検索でググると・・
>>828 OSとか設定で微妙に検索順は違うが、
少なくとも実行ファイルのディレクトリは最優先だから、それでいい。
DLLが無いとエラーが出るから、それをミロ←何処におけばいいか書いてある
Windowsのサービスプログラムを作成しています。 サービスのプログラム側から、ログインユーザが存在するのかを判定したいのですが 方法がわかりません。ご存知の方がいましたら教えていただけないでしょうか?
explorer.exe(正確にはログインシェル)が立ち上がってるかで判定できる
WTSEnumerateSessions
SetWindowTextの第2引数にNULL指定したらコントロールのテキストはクリアされるんですか?
そんなことはどこにも書いていない lpString 新しいウィンドウタイトルまたはコントロールのテキストとして使われる、NULL で終わる文字列へのポインタを指定します。
MSDNライブラリが2000切り始めよった
>>838 MSDNは読みましたが、NULLでクリアを意図しているコードを見たもので…
クリアするときはNULL文字を指定すればいいですよね?
MSDNよりそのわけのわからんコードを信用する理由は何? 仕様はどうでもいい、ただ挙動が知りたいって事なら実験結果がすべてだろ。 それに従って好きにしろよ。 ただし、そんな糞コードは誰にも使わせるな。
>>839 NULLの場合の挙動は知らないが、"\0"(NUL文字)は空文字列だからクリアできるに決まっとる
>>840 過去のバージョンで既定となっている動作でMSですら使っていそうならはそうほいほいと変更できないんじゃないか
1.SetText( hWnd, "" ) 2.SetText( hWnd, "\0" ) 3.SetText( hWnd, NULL ) 1と2は同じだが、3は明らかに意味が異なる 文字列は常にアドレスを持つのだ
WM_SETTEXTに反応するコントロールなら、ね
844 :
118 :2010/05/20(木) 02:07:12
>>842 ハァ?
NULLだってアドレスだろ?
どこもさしていないことが保証されている。
4.SetText( hWnd, '\0')
845 :
デフォルトの名無しさん :2010/05/20(木) 08:21:54
>>844 > 4.SetText( hWnd, '\0')
> 4.SetText( hWnd, '\0')
> 4.SetText( hWnd, '\0')
> 4.SetText( hWnd, '\0')
> 4.SetText( hWnd, '\0')
> 4.SetText( hWnd, '\0')
> 4.SetText( hWnd, '\0')
バカ発見 www
実行ファイル(自分)のパスを取得する方法を探しています。 アプリ内で起動している、自分のパスを取得する必要があります。 今までGetModuleFileName()で特に問題なく取得できていたのですが、 PC起動時に自動的に起動できるようにレジストリ登録したところ、 (HKLM\Software\Microsoft\Windows\CurrentVersion\Run) GetModuleFileName()で取得したパスがC:\Windows\system32\XXXXに変わりました。 正確に(いかなる場合でも)自分のファイルのパスを取得する方法をご存知の方がいましたら教えていただけないでしょうか?
>>846 hModuleにNULL入れたんじゃない?
VC++EE2008,2010両方で試したのですが GetSystemMetrics(SM_XVIRTUALSCREEN) が error C2065: 'SM_XVIRTUALSCREEN' : 定義されていない識別子です。 となり、コンパイル出来なくなってしまいました。 マルチディスプレイ対応のために座標を取得するコードなのですが、 最近のコンパイラではどうやっても動かせないのでしょうか。
それはコンパイラの問題では無くてSDKの問題だという事に思い至らない人は 有料の開発ツールを使いましょう。
FindFirstFileで [000] [0000] という2つのファイルがあった場合 00?0 では後者しかヒットしませんが 000? だと前者もヒットします 終端の?を正しく評価して貰うことは出来ないんでしょうか
851 :
デフォルトの名無しさん :2010/05/20(木) 20:18:54
ハァ?
FindFirstFile のワイルドカードルールが気に入らないなら 全ファイル列挙しつつ自前で文字列をマッチする
やっぱそれしかないのか 実を言うと質問した時点でもう自前のコードは書き上げちゃってたんだけど どうにもこの変な仕様が気になって何か自分の見落としがあるのかと思って質問してみたんだ 終端かそうでないかで評価の仕方が違うというのは何か気持ち悪いけどこういう仕様なんだな ありがと
> やっぱそれしかないのか そんな事は無い。MSに入社してAPIの仕様変更を決定できるまでに出世すれば可能。
855 :
118 :2010/05/20(木) 23:18:35
>>850 エクスプーローラーのファイル検索でどうなるか確かめれ
リージョンでウィンドウの形変えてるプログラム組んだんだが 俺のPCでは動いても、友達のPCでは形が変わらなかった それで、コード周りを調べたら SetWindowRgn( hwnd, hrgn, TRUE ); DeleteObject( hrgn ); と書いていたんだが、環境によってはDeleteObjectで元に戻ってしまう? SetWindowRgnで渡したhrgnは、システムが保持するのは知ってたけど 削除しても動いてたから、削除してました
>>856 SetWindowRgn 関数が成功すると、システムは、パラメータ hRgn で指定したリージョンを所有します。
システムは、このリージョンのコピーを作成しません。
したがって、これ以降はこのリージョンハンドルに対して関数を呼び出すべきではありません。
特に、このリージョンハンドルを削除しないでください。
必要がなくなると、システムはこのリージョンハンドルを自動的に削除します。
ただ関数と書かれるとSetWindowRgn 関数のことだと思ってしまうが 実はDeleteObject関数のことなんだよな
試しに実行してみたらDeleteしても動くな 元の形に戻るのかは分からないが、仕様で削除するなとあるからDeleteObjectの行を消すべき
他プロセスのRICHED20Aに対してEM_GETLINEを使ったときに なぜか一行の半分くらいしか文字列が取得されなくて困ってます そのプロセスには三つのRICHED20Aが含まれていますが そのうち一つは正常、あとの二つで問題が起きます 症状からすると文字数とバイト数を混同してるからだと思うのですが SendMessageWとSendMessageAを使い分けてもダメでした いろいろ試してみましたが解決の糸口すら掴めません もし宜しければこの無能な私に救いの手をお願いします
>>860 バッファサイズの指定をしてないか、間違えてるんでしょう。
>>861 ああ、書き忘れましたがバッファサイズはちゃんと指定してあります
>>862 バッファサイズの指定を間違えてるんでしょう。
まさか例えば日本語20文字に対して char のサイズで20バイトのバッファとっていて それでちゃんと設定してるつもりとかそういう
865 :
860 :2010/05/21(金) 13:35:47
バッファはかなり余分に取ってあります 言葉が足りなかったようなのでもう少し付け加えると 取得したい行の長さに関わらず必ず半分程度しか取得できないのです 例えば「あいうえ」という行であれば「あい」まで 「あいうえおかきく」という行であれば「あいうえ」までというようにです
メモリウィンドウで見るとどうなってるか調べた方がいいかもしれん
867 :
866 :2010/05/21(金) 14:01:58
つかVS使用前提じゃなかったねこのスレ スルーしてくれ
>>865 バッファサイズの指定を間違えてるんでしょう。
>>865 バッファサイズの指定を間違えてるんでしょう。
872 :
860 :2010/05/21(金) 15:30:35
バッファの指定を間違えているということはありません バッファサイズは固定してあるので もし皆さんの仰るようにバッファサイズの指定が問題であれば 「あいうえおかきく」の時に「あいうえ」が取得できて 「あいうえ」の時に「あい」しか取得できないはずがないからです それに最初にも書きましたが 対象のプロセスが持つ三つのリッチエディットのうち一つは同じ方法で上手く動くのです ソースは家に帰ってから出しても良いのですが 本当に普通にバッファを確保→先頭にバッファサイズを書込み→SendMessageしてるだけで 特に見せるような特別なことは何もしていません どこにでもあるサンプルソースと全く同じです
下手の考え休むに似たり 百聞は一見に如かず 愚者は経験に学び賢者は歴史に学ぶ
>>872 バッファサイズの指定を間違えてるんでしょう。
umm The return value is the number of TCHARs copied.
877 :
860 :2010/05/21(金) 18:46:13
自我崩壊しました
878 :
118 :2010/05/21(金) 18:49:37
double _fastcall ReadEMText(HWND hwndeditbox, void *buffer, double size) { double textlengh = GetWindowTextLength(hwndeditbox); if (textlengh > size) { GetWindowText(hwndeditbox, buffer, size); } else { ZeroMemory(buffer, size); return textlengh; }
2バイト文字で文字数にバイト数指定すると半分になるよ
こんな感じなんですが ??? ReadEMText(HWND hwndeditbox, std::vector<TCHAR>& buffer) { ???? GetWindowText(hwndeditbox, buffer, ??); ???? } どうしたらいでしょうか?
文字が半分しか取れないんです バッファが足りない、指定が間違ってるだろ バッファも十分にあります 指定も間違っていません ソース見せろよ 自我崩壊しました ← いまここ
ReadEMText に一致する情報は見つかりませんでした。 検索のヒント:
てか、ReadEMTextの定義か。 中身が、GetWindowTextって何よw
884 :
848 :2010/05/21(金) 20:31:06
Windows SDKをダウンロードしてWinUser.hを調べたところ #define _WIN32_WINNT 0x0500 とすればコンパイルが通る事がわかりました。(以前は0x0400で問題なかった) ありがとうございました。
Linuxが今でも使われてる理由が分かってきたきがする
>>884 本来マルチモニタサポートはWin98/2000からだけど、
Win9xのサポートを打ち切ったから2000からに書き換えたのかもしれんね。
ちなみに、sdkddkver.hに0x0500のような定数が定義されているので、
そっちを使うとマニア受けする。
>>886 そのソフト知らないけど、なんとなくMDIなんじゃなかろうかと思った
>>886 一見スマートに見えるけど、中身はガタガタっておちだろうな
いろんなやり方が考えられる
歴史が長いからガタガタでも、恐らく変なことはしてないだろう
>>886 普通はツールウィンドウ(WS_POPUPとWS_EX_TOOLWINDOWを持たせたウィンドウ)を使う。
そのスクショはAviUtilだと思うけど、Spy++で確認したらそうなってる。
画像編集ソフトなんかでも良く見るタイプ
892 :
886 :2010/05/21(金) 23:07:14
>>888 MDIというと、OfficeやPhotoshopみたいに、
>>886 のソフトよりは機能豊富(ウィンドウサイズの変更、
描画できるクライアント領域など)なウィンドウというイメージがあります・・・
そこまでは必要なく、
>>886 みたいに各種値を設定できるだけで十分なんです。
あと、MDIって、親ウィンドウの枠の中に複数存在するカタチじゃありませんでしたっけ??
>>889 >>890 中身は分かりませんが、とても使い易い上に、独自の処理をプラグインフィルタとして開発できたりと
拡張性、柔軟性も高いです。
作者のKENくんさんはとても技術力の高い方では、と思います。
>>891 >Spy++で確認したらそうなってる。
調べられるんですね!
ツールウィンドウのスタイルがあることは知っていましたが、シンプルなウィンドウ?くらいの認識しかありませんでした。
画像編集ソフトでよく使われるんですね。
ツールウィンドウスタイルで組むことにします。
みなさん、ご助言ありがとうございました。 m(_ _)m
PDFを読み込んでjpgかmpegにするAPIを教えてください
ありますん
え、マジ?
CreateWindowで作ったボタンを押したときにボタンを移動させたいんだけどどうすればいいですか?
ボタンを移動させるコードをかけばいい
念力を磨く
>>893 なんでそんなピンポイントの個人的な都合を満たすような関数が
OSのAPIにあると思ったんだよw
>>896 「ボタンもウィンドウ」 だから、移動のメッセージ投げればいんじゃね
>>899 そんなピンポイントってのが気になって、「pdf jpeg 変換」でぐぐったら
結構対処法が出て来る。Windows の API ではないけどネ。
世の中、同類の多さにびっくり。
方法とAPIじゃレイヤーがだいぶ違う。 「彼女を作る」で検索すると結構ヒットするけど、彼女を作るAPIはおそらく存在しない。
CreateGirlfriend
CreateLover
DiveToThe2DWorld
そこはスペック不足と言え
じゃあメモリを増設すればいいんだな!
すいません DestroyCherryBoyで注意すべきことはありますか?
ネットに繋がっていると、API呼び出し直後に通報される。
それを破棄するなんてとんでもない!
GetWomanStatusで相手が素人かプロかを事前にチェックしとかないと正常に動作しない
DestroyCherryBoyって(自分じゃなくて余所にいる)チェリーボーイをDestroyするって意味だろww
コールする側はCWomanである必要があるということか
BoyをDestroyしたら殺人ですがな Cherryだけを消さないと そういうAPIはありますか?環境はVista 64bitです。
Win7から対応じゃなかったっけ? MSもセコいよなぁ。
つまんね 鬱病予備軍だな
919 :
896 :2010/05/23(日) 05:28:07
みなさんありがとうございます 質問を変えます 座標x:100 y:100にボタンが存在するかを判定することはできますか?
>>913 Access DeniedになってしまうからCherryBoyなんだろ?
もういいよつまらない
>>922 その座標のウインドウハンドルを取得してウインドウクラスを確認する
セキュリティレベルを下げればアクセスできるぜ?
下げんな
上げて落とす
予想どおり^q^
myplugin.dllの設定を同一ディレクトリの myplugin.iniから読みたいんですが dll内のコードから自身のdllのフルパス名を取得する方法があったら教えてください。
GetModuleFileName
ありがとうございます。
win32apiのプログラムでコンソールから起動してコンソールにHello Worldと表示するにはどうしたらいいですか
AllocConsoleとかそこらへん
出力されません。何がまずいのでしょうか。。 #include <windows.h> #include <stdio.h> int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow) { AllocConsole(); freopen("CONOUT$", "w", stdout); //標準出力をコンソールにする freopen("CONIN$", "r", stdin); //標準出力をコンソールにする printf("Hello World!!\n"); return 0; }
>>933 #include <windows.h>
#include <stdio.h>
int WINAPI WinMain(HINSTANCE hInst,
HINSTANCE hPrevInst,
LPSTR lpCmdLine,
int nCmdShow)
{
AllocConsole();
freopen("CON", "w", stdout); //標準出力をコンソールにする
freopen("CON", "r", stdin); //標準出力をコンソールにする
printf("Hello World!!\n");
getchar();
return 0;
}
>>934 それでやったら新規にウィンドウが出てきてそこに出力されました。
そうじゃなくてコマンドプロンプトから実行して新規ウィンドウを開かずにその
コマンドプロンプトのウィンドウに出力されてほしいんですが。
氏んでほしい
GetStdHandle()
>>935 ならK&RのHello Worldでいい
>>935 だって自分でコンソールプロセス開いて書き出そうとしてるんだから、そうなるんじゃないの?
単純に今のコンソールで表示したかったら、
単に
略 {
printf("Hello World!!\n");
return 0;
}
でいいんじゃないの?
>>935 サブシステムをコンソールにしとけでなきゃAttachConsole
コンソールアプリケーションのプロジェクト作れとかそういうレベルじゃ
#include <stdio.h> void main() { printf("Hello Hell!"); }
943 :
118 :2010/05/26(水) 10:07:39
944 :
デフォルトの名無しさん :2010/05/26(水) 10:12:14
ppp
>>942 はJava出身
まだC/C++自体書きなれていないと推測
Java出身なら void main(){ printf("Hello HELL!"); } って書くと思うよ
947 :
デフォルトの名無しさん :2010/05/26(水) 12:26:20
設定で「マルチバイト文字を使う」にして char ほげ[];その後ほげに文字列を入れて、ウォッチでも入ってることは確認しています そして LRESULT Wm_CreateProc(HWND hwnd,LPCREATESTRUCT cs){ CreateWindow("BUTTON",ほげ,〜 と言う感じでコンパイルは通っているのですがボタンの名前にはほげの文字列は入っていません なぜなのでしょうか?
>>947 とりあえず全部のソース張れ
問題はお前が隠してる部分にある
すいませんもうできてました ほんとその通りでした
950 :
デフォルトの名無しさん :2010/05/26(水) 17:07:47
100マイクロくらいの制度のタイマー教えて timeSetEventって1ミリだから、
ぐぐれかす
952 :
デフォルトの名無しさん :2010/05/26(水) 17:25:55
知らないならレスするなよかす
知らないならそのままで師ねよカス
知らぬなら、鳴かせてみしょう、ほととぎす
955 :
デフォルトの名無しさん :2010/05/26(水) 17:36:47
ゴミしかいねえのかよここw
早く答えろ オナニーの時間なんだよ
ゴミっていわれると気持ちいいお!
959 :
デフォルトの名無しさん :2010/05/26(水) 17:47:31
ここ昔はもうちょいまともだったんだけどな。 今は煽るだけのゴミしかいなくなってるw
カスよばわりする人には答えませんーw−
PropertySheet関数からウィザードダイアログの呼び出しに付いてですが、 ダイアログの位置を変えたいのですが上手く行きません PropSheetProcのPSCB_PRECREATEで変更を試みたのですが、 サイズなどは変えることができますが位置は無反応なんです 詳しい人よろしくです(´・ω・`)
ぐぐれかす
散々ぐぐりましたよ。。。
ウィザードのダイアログのコールバック関数のWM_INITDIALOGで普通に位置を変えれました 勘違いしててシートのダイアログの位置を変えてたみたいです 申し訳ないです(´・ω・`)
VC++でスタティックライブラリを作るときってwin32コンソール用とwin32用とでは違いがあるんでしょうか?
ぐぐれかすぼけ
調べたらどちらでもいいみたいでしたが
どっちでもいいよ。 つかそのLIBのソースで呼び出す関数で決めたら 設定の手間が省けるだけだけど
うそぴょん
>>950 QueryPerformanceCounter
でぐぐれ
精度はハード依存
972 :
118 :2010/05/27(木) 04:40:16
難易度的に松竹梅のどのレベルを希望するん? それ以前に、キミの前の書き込みが三ヶ月以上前だと気付いています? こんな過疎スレにレスする人が居るわけがない!と、思いませんでしたか?
電波ゆんゆん
createwindowでボタンを作成し プログラム内でそのボタンを押すことは可能ですか?
975 :
118 :2010/05/27(木) 14:43:33
976 :
デフォルトの名無しさん :2010/05/27(木) 14:44:50
かかってこいうじむしども
977 :
118 :2010/05/27(木) 15:05:21
978 :
デフォルトの名無しさん :2010/05/27(木) 15:07:36
おらおらどうしたごみども
ウインドウを登録して表示するだけの最小コード書ける?
今やったらググらないと書けそうもないぜ ググったらコピペで済むか( ´ω`)
100文字以内で
>>980 書けないならレスしないで下さい。ウザいだけです。
「かける?」 という質問なのだから、「かけない」も正しい回答。
ウインドウクラスではなくウインドウを登録? 何に登録するの?
口だけのゴミが多いなあ・・・
はとや・・・うわっなにをする!
ここに点「フ」がある そしてここには点「マ」がある フ点と・・・うわっなにをする!
もうここには屑しかいないから必要ないんじゃない? 質問しても煽るだけのゴミしかいないし・・・
>>989 煽る人が出るのは大抵、煽られる側に何らかの問題があります。
>>990 みたいなゴミがいるから煽る奴が絶えないんだよね。。。
まあ態度が悪いと煽りたくはなるな
こりゃ煽られても文句は言えないな