トップページ⇒tech
1001コメント256KB

Win32API質問箱 Build116

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2013/10/30(水) 17:17:04.92
Win32APIについての質問はこちらへどうぞ。

■過去スレ
Win32API質問箱 Build115
http://toro.2ch.net/test/read.cgi/tech/1373671389/

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。
 英語版( http://msdn.microsoft.com/en-us/library/ )の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
0441デフォルトの名無しさん2013/12/31(火) 01:18:11.16
http://scripting.cocolog-nifty.com/blog/2010/01/post-a032.html
0442デフォルトの名無しさん2013/12/31(火) 05:57:34.55
>>436
しばらく気付かんかった・・・

>>437>>439
GetStdHandleして得られたハンドルに対して、GetFileTypeやGetConsoleModeでチェック掛ける。
>>441みたくコンソール専用機能を呼んでエラーを見ても良い
0443デフォルトの名無しさん2013/12/31(火) 21:56:38.82
>>439
isatty
0444デフォルトの名無しさん2014/01/03(金) 22:59:04.18
マルチディスプレイないのでテストができない! 助けて!
0445デフォルトの名無しさん2014/01/03(金) 23:20:32.25
ディスプレイを送ればいいんですか?
0446デフォルトの名無しさん2014/01/03(金) 23:42:20.48
偽ディスプレイドライバ作って下さい。
0447デフォルトの名無しさん2014/01/03(金) 23:56:59.88
偽ドライバですか。
0448デフォルトの名無しさん2014/01/04(土) 00:20:23.42
はい、お願いします。
0449デフォルトの名無しさん2014/01/04(土) 00:49:34.64
Windowsでドライバーを書くのはメーカーの人なんで、このスレでお願いしても
無理じゃないですかね?
というか、かなりハード寄りなので板自体難しいかも。
むしろこの際、Linux板でお願いしたほうが良いかもしれないです。
Linuxユーザーは日頃からドライバを書きなれてると聞きました。
0450デフォルトの名無しさん2014/01/04(土) 00:52:45.39
デバドラのプログラム書いてる人はlinuxユーザーでも少数でしょ
0451デフォルトの名無しさん2014/01/04(土) 00:58:22.14
ネットワーク管理者、アプリケーションプログラマ、ウェブプロデューサ、
業務アプリ開発者、カーネル開発者、ハードウェア開発者、経営者などを
一人で兼務している人もたくさんいますよ。
中にはドライバを書けない人もいるとは思いますけど、そっちのほうが
少数派ですよ。
0452デフォルトの名無しさん2014/01/04(土) 01:22:56.56
>>447
偽って言うか、仮想ディスプレイドライバじゃねーの?
そもそもノーパソの一つでもあればマルチディスプレイなんて楽にテストできる気がするが。
0453デフォルトの名無しさん2014/01/04(土) 16:05:46.41
SDKならともかく、デバドラっつーたらDDKの範疇でしょ
流石に分からんなあ…
0454デフォルトの名無しさん2014/01/04(土) 16:29:16.59
Win7/8.xあたりで音の左右をシステム的に入れ替える事って出来ないですかね?
TabletPCを180度回すと画面は回転しますが音の左右はそのままなので左右を
入れ替えたいです
0455デフォルトの名無しさん2014/01/04(土) 17:08:13.38
スレチ
ドトネ池
0456デフォルトの名無しさん2014/01/04(土) 17:16:56.74
DDK書いてるけど署名が面倒臭い
金かかるからfreeはやだ
0457デフォルトの名無しさん2014/01/04(土) 19:42:49.80
フリーで署名つきドライバ配布してる奴は寄付で賄ってんのかな
0458デフォルトの名無しさん2014/01/04(土) 20:01:47.68
セマフォの使い方について教えてください。

セマフォを使えば、共有資源にアクセスできる数を制限できるらしい
のですが、2以上にする理由がわかりません。

ある資源に同時にアクセスするスレッドが複数ある場合に排他処理を
して保護するのが目的だと思いますが・・・

2以上にするのであれば、排他処理しなくていいのでは?
と思ってしまいます。
0459デフォルトの名無しさん2014/01/04(土) 20:07:01.81
>>458
ドコモなり、AUなり、SBMのサポートに聞け
0460デフォルトの名無しさん2014/01/04(土) 20:16:55.19
>>458
プロセスを跨いで、有限のリソースにアクセス出来るのが
セマフォ。
プロセス内で1つのリソースを排他するならクリティカルセクション使えよ
0461デフォルトの名無しさん2014/01/04(土) 20:21:06.33
例えばDBサーバに接続したいけど同時にたくさん接続するとDBサーバに負荷がかかるから10接続までに制限したいとか、そういうのでどう
0462182014/01/04(土) 20:23:09.13
>>458
リソースが二個あるとかだろ。
0463デフォルトの名無しさん2014/01/04(土) 20:36:27.90
>>462
リソースが2個ならクリティカルセクションを2個用意し、スピンロックを設定したほうが
カーネルモードへの移行がなくてコスト的に安いのですが。
0464デフォルトの名無しさん2014/01/04(土) 20:40:53.75
どうぞご自由に
0465デフォルトの名無しさん2014/01/04(土) 20:44:44.08
ここで聞いても仕方ないよw
0466182014/01/04(土) 20:58:51.58
>>463
どっちのクリティカルセクションで待つの?
あと、リソースが 100個あったらどうする気?
0467デフォルトの名無しさん2014/01/04(土) 21:03:15.50
2こで2なら
100なら100だろ

大丈夫か?
0468デフォルトの名無しさん2014/01/04(土) 21:05:49.47
Wikipediaのセマフォを読んでわからなかったら、また質問にきなさい
0469182014/01/04(土) 21:11:12.16
>>467
前半読んでから出直せよ...
0470デフォルトの名無しさん2014/01/04(土) 22:41:48.25
他には誰も解答できていない件
0471デフォルトの名無しさん2014/01/04(土) 23:52:01.21
ミューテックスは資源にアクセスできるのがある時点で1スレッド。
セマフォは複数同時にアクセスを許し、許す数を指定する。
セマフォで1時点で1スレッドの制限ならミューテックスを使えって話。
複数のスレッドから同時にアクセスを許す資源ならセマフォを使う。
0472デフォルトの名無しさん2014/01/05(日) 00:26:53.78
>>458
自由に同格に使えるプリンタが2台あるような場合に使うんだよ
セマフォを獲得出来たということは、プリンタが使える
逆に、セマフォが獲得出来なければ、空いているプリンタは無いので待機する
0473デフォルトの名無しさん2014/01/08(水) 12:28:06.86
そんな機能WinAPIにあったの?
0474デフォルトの名無しさん2014/01/08(水) 16:22:03.87
運営が削除するだろ
削除しなければスレ違いOKという運営のメッセージ
0475デフォルトの名無しさん2014/01/08(水) 16:29:08.02
消されると増えるログ
0476デフォルトの名無しさん2014/01/08(水) 17:17:14.09
かかってこいよ
0477デフォルトの名無しさん2014/01/08(水) 19:37:35.42
vb.netからWIN32APIを呼ぶときの質問いいですか?

とあるデバイスドライバを使ってBIOSと通信する
プログラムを書いているんですが、
殆どの環境でdeviceioControlが失敗します。

例外をキャッチすると
「PInvoke 関数がスタックを不安定にしています」
と出るんですが、どこが間違えてるのかわからず・・・。
deviceioControlの正しい宣言を教えていただけませんか?

ちなみに環境はVB.net2010で、OSはwindows8,8.1Proです
0478デフォルトの名無しさん2014/01/08(水) 19:45:28.56
スタックが狂うなら引数の数か呼び出し規約を間違えているに決まっているだろ
0479デフォルトの名無しさん2014/01/08(水) 20:02:20.57
甘えているといわれるかもしれないけど、
宣言の方法を教えていただけませんかね。

引数の数はあってるはず。多分宣言時の型が間違っているのだろうけど

http://www.pinvoke.net/default.aspx/kernel32.deviceiocontrol

上のサイトのvb signatureを引用して
marshal.allocglobalでポインタに必要な配列分のメモリを割り当てて
実行して結果をとるというもの。

64bit win8.1では動くこともあった。
32bit win8では動かず。
0480デフォルトの名無しさん2014/01/08(水) 20:11:02.98
>>479
> 引数の数はあってるはず
先入観を捨てろ
1から見直せ
0481デフォルトの名無しさん2014/01/08(水) 20:16:34.25
んなあほな。合ってるがな。
つーか動作した環境もあると言ってるしょ。

deviceiocontrolは
・ハンドル
・命令番号
・入力データの先頭ポインタ
・入力データの長さ
・出力データの格納先ポインタ
・出力データバッファの長さ
・出力データ数の格納先変数のポインタ
・動作パラメータ

で一定でしょ。
ポインタはintptr,長さはuintegerで宣言してるけど
それが悪いのか、それとも別の理由なのか
わからない教えて!
0482デフォルトの名無しさん2014/01/08(水) 20:20:37.60
これは合っているのだろうか。
dllinportとdeclareで動作が変わることなどあるのだろうか

Public Declare Function DeviceIoControl_IOCTL_GET_DISK_LENGTH_INFO Lib "kernel32" Alias "DeviceIoControl" ( _
ByVal hDevice As System.Int32, _
ByVal dwIoControlCode As System.Int32, _
ByRef lpInBuffer As System.Int32, _
ByVal nInBufferSize As System.Int32, _
ByRef lpOutBuffer As GET_LENGTH_INFORMATION, _
ByVal nOutBufferSize As System.Int32, _
ByRef lpBytesReturned As System.Int32, _
ByRef lpOverlapped As OVERLAPPED) As System.Boolean

<StructLayout(LayoutKind.Sequential)> _
Public Structure OVERLAPPED
Public Internal As System.Int32
Public InternalHigh As System.Int32
Public offset As System.Int32
Public OffsetHigh As System.Int32
Public hEvent As System.Int32
End Structure
0483デフォルトの名無しさん2014/01/08(水) 20:26:52.27
整数の長さを見直しなさい
32/64で違う場合の鉄則だ
0484デフォルトの名無しさん2014/01/08(水) 20:48:05.49
>>481
引数だけに限らず「先入観」を捨てるのよ
0485デフォルトの名無しさん2014/01/08(水) 21:24:30.14
抽象的なこといわず、答えを教えてくださいよ。
0486デフォルトの名無しさん2014/01/08(水) 21:32:52.69
そのサイトから引用したという宣言を「コピペ」しろ
0487デフォルトの名無しさん2014/01/08(水) 22:22:24.37
こんな感じです。
inbuffer,outbufferにはmarshal.allsocGlobal()でメモリを割り当ててます

<DllImport("Kernel32.dll", SetLastError := False, CharSet := CharSet.Auto)>
Public Shared Function DeviceIoControl( _
ByVal hDevice As Microsoft.Win32.SafeHandles.SafeFileHandle, _
ByVal IoControlCode As EIOControlCode, _
ByVal InBuffer As IntPtr, _
ByVal nInBufferSize As UInteger,
ByVal OutBuffer As IntPtr,
ByVal nOutBufferSize As UInteger, _
ByRef pBytesReturned As UInteger,
ByRef Overlapped As System.Threading.NativeOverlapped) As Boolean
End Function
0488デフォルトの名無しさん2014/01/08(水) 22:40:38.12
> ByRef pBytesReturned As UInteger,
0489デフォルトの名無しさん2014/01/08(水) 22:59:21.14
この通りに宣言されてるなら問題ない 別の理由
0490デフォルトの名無しさん2014/01/08(水) 23:20:27.86
>>488 間違えてますか?
>>489 手がかりを調べるツールはないでしょうか?
 例外の原因が絞り込めれば非常に助かるのですが。
0491デフォルトの名無しさん2014/01/09(木) 00:40:03.71
>>488 わかりました多分。
アンマネージな関数にむかって
byrefでメモリアドレス渡したら駄目ですね。

intptrにして、DWORDなので4バイトメモリ確保してみます。
64ビットも意識してmarshal.sizeof(integer)のほうがいいでしょうか。

最期のoverlap構造体もintptrにしてintptr.zeroを
値として渡したほうがいいでしょうか。

明日検証の本体で確かめてみます。
0492デフォルトの名無しさん2014/01/09(木) 21:47:41.46
ポインタ型はすべてアンマネージでメモリを確保したら
問題なく動作したよ。

ただ、deviceiocontrolがクソ遅い。これはどうしたら。
0493デフォルトの名無しさん2014/01/12(日) 00:15:46.21
ボインボインが使えれば
舐められれば
吸えれば
神言語
0494デフォルトの名無しさん2014/01/12(日) 01:25:53.09
これがVBか
0495デフォルトの名無しさん2014/01/14(火) 19:39:58.44
>>495 使えるけどVCと違ってガベージコレクタを意識しなきゃいけないんだよ

Dim gch As GCHandle = GCHandle.Alloc(obj, GCHandleType.Pinned)
Dim address As intptr = gch.AddrOfPinnedObject()

hoge(intptr)

gch.Free()

みたいにする。
VC++は確かに高速だけど
直に触りすぎるから好きではないな。
0496あぼーんNGNG
あぼーん
0497あぼーんNGNG
あぼーん
0498あぼーんNGNG
あぼーん
0499デフォルトの名無しさん2014/01/17(金) 12:14:06.56
http://wired.jp/2014/01/16/death-pc-also-mean-end-web/

ブラウザ死亡確定
開発効率の向上とインストールの簡易さ向上により
もはやWebアプリの利点は失われた。
0500デフォルトの名無しさん2014/01/17(金) 15:33:27.00
>>499
FLASHが出てきたときもJSの利点はなくなったとか言ってる奴いたなぁ。
あいつ今頃どこで何をしてるんだろう。
0501デフォルトの名無しさん2014/01/17(金) 16:38:48.65
>>499
何を言ってるんだ?
ウェブアプリの利点がゼロになったと仮定しても、
ブラウザはウェブブラウジングを行うものとして残り続けるよ
0502片山博文MZコスモ ◆T6xkBnTXz7B0 2014/01/17(金) 17:51:59.07
ウィンドウズってブラウザからワンクリックインストールできないの?
0503デフォルトの名無しさん2014/01/17(金) 17:57:52.74
ブラウザからexe起動できるようにさせとけば出来るよ
ActivXでそういうページ作れば
0504デフォルトの名無しさん2014/01/17(金) 18:08:08.71
ブラウザから特定のアプリがインストール済みとかバージョンとか確認できればいいのに。マイクロソフトさん、お願いします。
0505デフォルトの名無しさん2014/01/17(金) 18:22:24.43
できますよ
0506デフォルトの名無しさん2014/01/17(金) 19:38:03.08
JSとFlashは実質的に同じころ出てきたんだよね。
0507デフォルトの名無しさん2014/01/17(金) 20:36:26.24
>>504
ActiveXでいいじゃん
0508デフォルトの名無しさん2014/01/17(金) 23:34:35.49
エクスプローラからファイルを右クリックすると
JPGやGIFだと、ポップアップメニューから「プレビュー」で表示できますが
あのウインドウを出すAPIはありますでしょうか
拡張子の関連で開くShellExecuteでなく、あのプレビューウインドウを出せたらいいなと
0509デフォルトの名無しさん2014/01/18(土) 10:25:42.16
>>508
それって「Windows 画像とFAXビューア」がインストールされていて、エクス
プローラのコンテキストメニューを拡張している前提では?
0510デフォルトの名無しさん2014/01/18(土) 11:38:51.32
ストアアプリだと、オブジェクト形式のWindows APIなんだね。
関数形式のWin32API脂肪?_?
0511デフォルトの名無しさん2014/01/18(土) 12:31:21.67
>>509
確かにタイトルは「Windows 画像とFAXビューア」でした
Windows標準機能かと思っていました
が、取り敢えず正体はShimgvw.dllで、これをRundll32.exeから呼ぶのだそうです
APIでなく、
Rundll32.exe Shimgvw.dll,ImageView_Fullscreen C:\0018.bmp
をそのまま実行すればアニメGifでもTiffでも表示できますね
0512デフォルトの名無しさん2014/01/18(土) 14:56:51.57
>APIでなく
スレタイすら読めないほど頭悪いのか?
それともクズ親に育てられたからわざとスレチで荒らしてんの?
お前生きてるだけで迷惑だよ。
0513デフォルトの名無しさん2014/01/18(土) 15:36:04.58
MacKain not obeying
0514デフォルトの名無しさん2014/01/18(土) 18:00:06.54
>>512
そこでお前がAPIはこれだと示せばいいだけだ
お前こそが邪魔なんだよ
0515デフォルトの名無しさん2014/01/18(土) 18:02:19.95
他スレ荒らしてるアンチhogeと罵り方がそっくり
同一の社会不適合者だろう
0516デフォルトの名無しさん2014/01/18(土) 19:44:32.44
>>515
アンチhogeとapiスレ基地は同一の奴らだろ
0517デフォルトの名無しさん2014/01/18(土) 20:46:00.92
>>511
Shimgvw.dll内のImageView_Fullscreenを呼べば立派なWin32APIじゃね?
0518デフォルトの名無しさん2014/01/18(土) 21:32:10.91
お前らが今やってるのは
ネトウヨ vs 在日のフリしたネトウヨ

にしてもこれは何だ

http://webcache.googleusercontent.com/search?q=cache:0hOmvGZxuMwJ:toro.2ch.net/test/read.cgi/tech/1383121024/+&;cd=1&hl=ja&ct=clnk&gl=jp

>>495付近のログがおかしい
Googleキャッシュと別物になってる

書き込み内容もたいして問題ないし
書き込み方が異常だったとかで削除したのか?
0519デフォルトの名無しさん2014/01/18(土) 21:38:48.72
>>518
最近は運営が私情で好き勝手に削除するようになったんだよ。
おかげで「2chのWin32APIスレはどうせ削除されるからどんな内容でも書き放題」って話をたまにきくようになった。
0520デフォルトの名無しさん2014/01/18(土) 22:56:26.58
実際、プログラムなんて書いてる暇なんてあったら
神に祈りでもしてたほうが物事もシンプルになるし
こんなことを仕事とかでやらされる人達って苦行でしかないよ
0521デフォルトの名無しさん2014/01/18(土) 23:20:58.95
神に祈りをささげても何も起こらないが
プログラムを書けば少なくともそれは実行される
有言実行なだけ神よりはまし
0522デフォルトの名無しさん2014/01/18(土) 23:25:53.77
>>520
FSMの信者ですか?
0523デフォルトの名無しさん2014/01/18(土) 23:35:58.97
手順に雁字搦めにされた囚われのプログラマーさんには
過去の呪縛に囚われ続けるプログラムを動かすことしかできない
さては君、どのような世界をも創造できる神の偉大さを知らないんだね?
祈りと瞑想の力を知らないんだね?もったいない!
0524uy2014/01/19(日) 01:09:32.53
プログラマの総数が増えると
0525uy2014/01/19(日) 01:10:28.42
もうやだ途中送信した

もういい死ね
0526デフォルトの名無しさん2014/01/19(日) 01:24:48.70
あのな、プログラマの総数が増えると国力が落ちる可能性がある
IT業界は不況なのではなく虚業
どうせ100人の雑魚がゴミッカスソースコードを書いたところで捨てるんだから
1人ハッカーレベルがいれば良い
プログラミングはいずれ終焉する
ハッカーがどんどん便利なもの、効率的なものを作り出して行って、
技術・知識がなくても効率を出せるようになってくる
結局、たった一人の力で何百人もの仕事ができるなんていう「才能ある奴にとっては」美味しい状況なんて
長続きしない
いずれは、だれがプログラミングしても似たような結果が得られる方向へ動いてしまう
プログラマや技術者なんてのは常に足りない状態で良い

日本にPGは、多すぎ
0527デフォルトの名無しさん2014/01/19(日) 01:35:01.68
>>526
とか言ってたΣプロジェクト。
まぁアレはアレで別の問題だけど。
0528デフォルトの名無しさん2014/01/19(日) 06:33:47.95
よほどITに疎くなければ気づける事でしょ
Σプロジェクトなんての初めて聞いた

ITダメな奴に指揮やらせた結果がこれか
日本のソフトウェアが弱い理由の一因かね
0529デフォルトの名無しさん2014/01/19(日) 07:16:41.73
Σ
Σ
Σ
0530デフォルトの名無しさん2014/01/19(日) 07:58:26.74
>>518
いや、単に荒らしの書き込みが削除されただけじゃん
むしろ削除足りんくらいだと思うけど
0531デフォルトの名無しさん2014/01/19(日) 08:11:02.22
ここは削除リクエストしなくても削除される特殊なスレ
0532デフォルトの名無しさん2014/01/19(日) 09:18:32.07
Σプロジェクト知らないって、ゆとり世代の自称ハッカーさん?
0533デフォルトの名無しさん2014/01/19(日) 10:21:58.86
よほどITに疎くなければ知らないわけないと思うがw
0534デフォルトの名無しさん2014/01/19(日) 10:22:59.12
>>526
お前にできるのは100のスレにゴミを撒き散らすだけだろ
0535デフォルトの名無しさん2014/01/19(日) 10:39:37.95
俺も多分ゆとりだけど、名前は忘れてたけど、ググったら…ああコレか、とは思った
0536デフォルトの名無しさん2014/01/19(日) 11:45:45.56
>>526
1人で足りるわけねーだろ
日本に多すぎるのはPGではなく、世話ばっかり焼かせるPGもどきだ
バブル期の日本の勢いをもう忘れたか? 甘ったれが問題の根底だよ
0537デフォルトの名無しさん2014/01/19(日) 15:01:21.46
俺が知っているのは技術方面のみで業界については知らないとはっきり言っておく
IT業界に関わる気ないし
本当の意味で独学であって、そこから導き出される答えが偶然にも
お前らの業界に蔓延る常識とマッチしてるか否かの問題
0538デフォルトの名無しさん2014/01/19(日) 15:13:42.88
Project Kyrillとは、SmokymonkeySによって 2009年4月ごろから開発されている
アクション・アドベンチャーRPGのコードネームです。
Unity3Dゲームエンジンを使って、2名のアマチュアによってつくられています。
ブラウザ上でプレイできるオンラインのシングル/マルチプレイのゲームになる
予定です。MMORPGではありません。
http://www.smokymonkeys.com/kyrill/

オンラインで遊べるオープンワールドのHack & SlashタイプのRPG。MMORPGじゃない。
冒険、探索、採取、戦闘など、RPGのごく当たり前の楽しさを、ごく当たり前に遊べるように。
プレイヤーにもクリーチャーにもレベルがなく、レベルを上げるためにクエストをやる必要もない。
プレイヤーは3つのクラス、6つのキャラクターから選ぶ。アイテムやスタッツは全クラス共通。
ユニークなスキルツリーと、ランダムスタッツを持つ個性的なアイテム。
無数の秘密の道や隠された場所がある豊かで複雑なワールド。
ランダム生成されるダンジョン。
自分のペースで遊べるシングルプレイと、数人の仲間と遊べるマルチプレイ。世界中のプレイヤーと
競い合えるさまざまなランキング。
0539デフォルトの名無しさん2014/01/19(日) 16:54:18.28
UnityはWindowsAPIに含まれるのか否か

今のWindowsの仕様もう飽きた
そろそろインターフェースレベルで次世代の規格に移行してほしい
0540デフォルトの名無しさん2014/01/19(日) 17:11:50.56
むしろ"含ませない"だろ
WinAPIは過去の技術
■ このスレッドは過去ログ倉庫に格納されています