日記帳
本ページはプロモーションが含まれています
カテゴリー
Links
blog(ブログ)マスター
アンドロイドの巣
ゼロから始めるベランダ菜園
タイトル
2024年11月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

Search Results

タイトル


執筆:2024.10.10
編集:2024.10.10

Delphi12にアップグレードしたらAndroidのbuildができなくなった。

C++は13からサポート終了したそうですね。その終了理由がわけわかめですが?
過去にKylix, .net のサポート打ち切りで信用できない開発言語ですので、とうとうきましたね

C++Builder: 削除された iOS と Android
RAD Studio Athens は、iOS 64 ビット プラットフォームと Android 32 ビット プラットフォームを削除しました。

そろそろ Delphi androidを Visual Studioに移植したほうがよさそうです。幸い1プロジェクトでcoplilot先生に手伝ってもらえば数日あれば移植終わりそうです。
近いうちに .NET MAUI に移植したいと思います。

とりあえず復旧できたの手順を書いておきます

現象

標準インストールしただけでは、不具合があり
SDK 基底パス, avdmanager.bat または androud.bat の場所, SDK APIの場所
が無効になっていて利用できない。

» 続きを読む

カテゴリー: ぷろぐらみんぐ
2024.10.10

タイトル


執筆:2024.10.10
編集:2024.10.10

iPhoneとAndroidを同時に開発できるクロスプラットフォーム開発ツール

を Copilot 先生に相談してみた。

  1. .NET MAUI

    .NET MAUI はオープンソースであり、Xamarin.Forms を進化させ、モバイルからデスクトップ シナリオに拡張したものです。
    .NET MAUI アプリのサポート対象プラットフォーム LINK

    新規プロジェクトを実行しただけでファイルが数千個できる(ファイル数: 2,275、フォルダー数: 1,182)。android apk 140MB.
    🚫 ネットワークドライブに配置すると意味不明なエラーが表示されて実行できない。
    📌 実行しないとページをビュジュアル編集できない変な仕様。
    🚫[致命的欠陥] .NET MAUI XAML デザイナーは、Visual Studio 2022 ではサポートされていません。

    Xamarin:  [C#]
    「Xamarin」は2024年5月1日に終了、「iOS 17」「Android 14」に対応せず
    Xamarinは、C#を使用してiOSとAndroidの両方で画像の入出力を行うことができます。`System.IO`名前空間を使用してファイル操作を行い、`Xamarin.Forms`の`Image`コントロールを使用して画像を表示できます。
  2. React Native: [JavaScript]
    React Nativeも画像の入出力をサポートしています。`react-native-fs`パッケージを使用してファイルシステムにアクセスし、画像の読み込みや書き込みを行うことができます。

  3. Flutter: [Dart]
    Flutterは、画像の読み込みや書き込みを簡単に行うためのライブラリを提供しています。`Image`ウィジェットを使用して画像を表示し、`image_picker`パッケージを使用して画像を選択・保存することができます。

  4. Unity:  [C#]
    主にゲーム開発に使用されるクロスプラットフォームエンジンですが、
    iOSとAndroidのアプリ開発にも利用できます。3Dグラフィックスやインタラクティブなコンテンツに強みがあります。

» 続きを読む

カテゴリー: ぷろぐらみんぐ
2024.10.10

タイトル

執筆:2023.08.30
編集:2023.08.30


標準ツール(インストールが必要)

WinForms ReportViewer コントロール

インストール方法
(1) Visual Studio Community 2022の更新をインストール
(2) メニュー : 拡張機能 : 拡張機能の管理
オンライン : 検索 : Report
[Microsoft] Microsoft RDLC Report Designer 2022
手順: ダウンロード : 保存 : インストール(保存したファイルを実行する)

サードパーティーライブラリ

PDFがいい場合はサードパーティーライブラリ
  • iTextSharp
  • QuestPDF
など


Microsoft RDLC Report Designer 2022インストール失敗

(1) Visual Studio Community 2022の更新をインストール

ヘルプ : 更新プログラムの確認

先にIDEを更新しておかないとインストールに失敗することがあります。

Microsoft.RdlcDesigner.vsixを実行
Visual Studio Community 2022
- 拡張機能の Visual Studio Community 2022 へのインストールを開始しています...
- Package 'Microsoft.VisualStudio.WorkflowManagerTools.Msi,version=17.3.32708.82,chip=x64,language=ja-JP' failed to install. MSI: C:\ProgramData\Microsoft\VisualStudio\Packages\Microsoft.VisualStudio.WorkflowManagerTools.Msi,version=17.3.32708.82,chip=x64,language=ja-JP\WorkflowManagerTools_x64.msi, Properties: REBOOT=ReallySuppress ARPSYSTEMCOMPONENT=1 , Return code: 1603, Details: インストール中に致命的なエラーが発生しました。, Signature: PackageId=Microsoft.VisualStudio.WorkflowManagerTools.Msi;PackageAction=install;ReturnCode=1603
- インストール エラー : System.AggregateException: 1 つ以上のエラーが発生しました。 ---> Microsoft.VisualStudio.Setup.PackageFailureException: Package 'Microsoft.VisualStudio.WorkflowManagerTools.Msi' failed to install
失敗した場合は、内部的にインストール済みフラグがたっているので、拡張機能を開きアンインストールする。

原因がわからないので Visual Studio Community 2022の更新をインストール
現在のバージョン: 17.7.1
更新プログラムのバージョン: 17.7.3

再度 Microsoft.RdlcDesigner.vsixを実行
失敗
Visual Studio Community では利用できないのかもしれない。
2023.08.30

タイトル

執筆:2023.08.16
編集:2023.08.16


Borland時代のDelphiで作ったアプリはWindows10で表示の不具合などいろいろ問題を起こすので
Delphi11へサクッと移行したほうがいいです。
普通にコード書いてるだけなら無修正でコンパイル通って移行できると思います。
プロジェクトオプションの PEのバージョンを 既定値の6.0から 5.0 にするとXPでも動作します。
PE 6.0 vista以降
PE 5.0 XPなど

JCL 2.8 [master] JCL 2.1
Delphi6 OK OK
Delphi2005 Error ❌
(Delphi内部バグ)
- jvcl3_39 jcl2_1
Delphi 11 OK


Windows ME,XP, VISTAなんて使わないでしょ。
古いDelphiはプロジェクトアップグレードして
古いDelphiと すっきり お別れしよう!!

Delphi 無料エディション1年だからと敬遠しているあなた。
生成したexeもリポジトリにいれておけば問題なし。

新規プロジェクトは断然 Visual Studio をお勧めします!!

それいけ ドット ネット

» 続きを読む

カテゴリー: ぷろぐらみんぐ
2023.08.15

【DIY修理】Tripmate 850 GPS ロールオーバー

執筆:2019.10.24
編集:2019.10.24


2019年4月7日に「GPS週数ロールオーバー」と呼ばれる事象が発生いたしました。
「GPS週数ロールオーバー」は一定の周期で発生する仕様上の現象です。

そして、GPSモジュールが故意に「GPS週数ロールオーバー」に対応していなかったため
GPSモジュールにおいて、年月日が間違った情報を返し、正常に利用できなくなりました。

ログを見ると
日付 GPSログ

GPSログ
ファイル
タイムスタンプ

2019/04/05 19/04/05 2019/04/05
2019/04/07 99/08/22 2099/08/22
2019/10/01

00-02-15
(150200)


GPSの日付 99年 は (19)99年を指しているのに対し、Tripmateは 2099年と解釈しているため
2099年となります。

GPSの日付は10bit情報なので、1024週分だけ日付を足してあげればいいことになります。

手順
  1. 年を下2桁にします。(千百はきりすてます)。
    99はもう終わっているため 20xx年月日
  2. 20xx年月日に1024週たすと、正常な日付になります。
PHPの場合
$date = new DateTime('1999-08-22');
$date->add(new DateInterval('P1024W'));
echo $date->format('Y-m-d') . "\n";
既存のログを修正する場合は、 $GPRMCの行を修正することになります。



GPSモジュールレベルで修理する場合
1. GPSモジュールのファームウェアを更新する
2. GPSモジュールを交換する
3. GPSモジュールの信号を変換する
上記の3通りの方法があります。

1.サポートが終了しているためファームウェアレベルでのアップデートは無理でしょう。

2.GPSモジュールを交換する
交換できそうなGPSモジュールがあれば、交換します
(TripmateのGPSモジュール端子を解析していないので今後に期待)

3.GPSモジュールの信号を変換する
マイコン ATTINY85-20SUR、ATMEGA328P-AU あたりで、モジュールレベルの日付変換器を作れば正常な値になりそう。
フローチャート:GPSモジュール(データ)IO ⇔ マイコンIO ⇔ 本体IO
マイコンの要件:1行分のデータをバッファできる。日付計算変換するだけのプログラム容量がある。IOが4つある。
(TripmateのGPSモジュール端子を解析していないので今後に期待)

収容する場所が極めて小さいため、
ATMEGA328P-AUを採用する可能性あり。

» 続きを読む

カテゴリー: General
2019.10.24

mfc140u.dll が見つからなからない

執筆:2019.09.03
編集:2019.09.03


エラー

コンポーネントが見つかりません

mfc140u.dll が見つからなかったため、このアプリケーションを開始できませんでした。アプリケーションをインストールし直すとこの問題は解決される場合があります。

これは、アプリケーションが使用しているマイクロソフトのダイナミックリンクライブラリという(.dll)ファイル群がインストールされていないために表示されるメッセージです。
正常に起動できるようにするには、
をインストールしてあげるだけです。
簡単ですね。猫にでもできます。
必要なファイルはマイクロソフトにおいてあるのでダウンロードしてインストールしてください。

ダウンロード
Visual Studio 2015、2017、および 2019 用 Microsoft Visual C++ 再頒布可能パッケージのダウンロード

32ビット64ビットのどちらかわからない場合は、32ビット(x86)のほうからインストールしてみてください

メモ: Visual C++ 2015、2017、2019 は、共通パッケージです。すべて同じ再頒布可能ファイルを共有します。

mfc140u.dllより数字が小さい場合は別のパッケージなので、別途ダウンロードしてください。

簡易早見表:Microsoft Visual C++ 再頒布可能パッケージ

エラー

Microsoft Visual C++

再頒布可能パッケージのバージョン

mfc140u.dll 2015,2017,2019
mfc120u.dll 2013 (VC++ 12.0)
mfc110u.dll 2012 (VC++ 11.0)
mfc100u.dll 2010 (VC++ 10.0)
mfc90u.dll 2008 (VC++ 9.0)
カテゴリー: General
2019.09.03

オープンソースになったマイクロソフトのアプリたち メモ

執筆:2019.06.09
編集:2019.06.09


Windows 電卓
公開日:2019/3/6
Announcing the Open Sourcing of Windows Calculator
https://blogs.windows.com/buildingapps/2019/03/06/announcing-the-open-sourcing-of-windows-calculator/

Visual Studio Code
MSBuild
Windows Terminal

https://github.com/microsoft
で 2500以上のリポジトリが公開されている



古代のアプリの一般公開されたソース

ファイルマネージャー
Microsoft DOS V1.1 and V2.0
Microsoft Word for Windows version 1.1a
カテゴリー: General
2019.06.09

Delphiのプロテクションツール (メモ)

Delphiに引きこもらないで、すばらしいVisual Studioの良さを確かめてほしいです。
Visual Studio 2017,2015 Communityは、制限なしの無料ですからね。
なれた環境でチャチャチャと高速リリースするのは戦術としては有効ではありますのでDelphiの否定はしませんが
脱Object pascal言語を推奨しています。
それいけ、 Visual Studio !!

Windowsストアアプリにしてしまえば、販売も期限や制限もマイクロソフトが管理してくれるので完全自動販売機化できます。 ついでにマルチデバイス対応してしまえば、iOSやAndoridからの収益も
さらにさらに、国際化すれば相乗効果でもっともっと売り上げがアップするかも

というとこで、デスクトップでちまちま制限をかける時代は、
パッケージ製品や特定の業務に特化したアプリ以外では終焉を迎えつつあります

Windowsストアアプリは、無料版Delphiでは作れません。
(参考リンク) Delphi / C++Builder で Windows 10 ストアプリ制作
  • 開発側 RAD Studio / Delphi / C++Builder Berlin 10.1 Update 2以降
  • 購入者側(ユーザー端末)にWindows 10 Anniversary Update以降
が必要

でも、VidualStudioなら完全無料でWindowsストアアプリがつくれ
しかも開発環境由来のバグに見舞われることがほぼないので、開発に専念できます
某開発ツールとは大違いです
ただ問題点があって、VidualStudioだと付属ツールで逆コンパイルができてしまうので難読化処理が必要になります

Delphi Vidual Studio
マルチデバイス 有料版 無料
Windowsストアアプリ 有料版 無料
難読化 ターゲットによる 基本的に必要

難読化
.Netアプリ 基本的に必要 備考
Delphi
Win32ネイティブバイナリの場合は任意
(Delphi.Netは必要)
不明
Android 基本的に必要 Android SDK に含まれている
Proguard
proguard.cfg
-keep class クラス名 { *; }
iOS 不明 不明

amazonアプリの設定(コードの難読化

アプリ側で旧形式の制限をかけたい場合

* フリー
TurboPower OnGuard
使っていないのでなんともいえませんが無料だそうです

* ○○××の市販ツール
10万円もするそうです。昔は3,4万円だったような気がします。

Delphi言語ユーザーが激減したこと
アプリマーケットの影響で需要がめっきりなくなったこと
が価格上昇に反映されていると推測されます。



はじめよう Windows ストア アプリ (メモ) 

カテゴリー: General
2017.03.14

Delphi 10.1 Berlin Starterは使いにくい

デバッグ時のローカル変数一覧 : なし
定義の検索: ジャンプしない
リファクターがない
データベース使えない

ハイ!!
ということで
無料の フル機能の Microsoft Visual Studio のほうが1万倍?1億倍くらい いいです。

アプリは、Dephiから無料のマイクロソフト製品へシフトしよう!!
バグから解放されて生産効率 超アップ!!

カテゴリー: General
2017.02.27

ストアアプリ ターゲットOS

Visual studio2015

  Windows
10
Windows
8.1
Windows
8.1Phone
iOS Android 言語
UWPアプリ × × × × C#、VB、C++

ユニバーサル
プロジェクト
(Windows8.1)

× × C#
xamarinアプリ × × C#
(出典:http://www.atmarkit.co.jp/ait/articles/1506/12/news022.html)

Windowsストアは、iOSやAndroidストアに比べると市場が小さいらしい(儲からない)。

モバイルをターゲットにするなら、Xamarinで開発したほうがよさそう。

Windowsストア限定をターゲットにするなら、UWPアプリでよさそう
  • Windows10強制アップグレードで、Windows8.1デスクトップユーザーは相当減っているので、切り捨ててもいいように思います。
  • Windows8.1Phone:モバイルのバッテリー寿命と交換スキルを考慮すると2年もすればスキルなしユーザーはいなくなるでしょう。
  • UWPアプリは、ストアに登録できなかった場合、実行不能の産廃となるので注意しよう
    その場合は、リサイクルして 通常のWindowsアプリにするしかないでしょう


  • xamarinアプリ
    • Windows 10 Mobileをエミュレーターで開発する場合
      Hyper-V が必要になりWindows 10 Pro 以上が必要らしい
    • ユーザーアカウント名が英語でない場合エラーになるらしい
      おそらくユーザーフォルダ名の問題でしょうから
      まずアルファベットでWindowsアカウントユーザー登録し、そのユーザーでWindowsログイン後、日本語にユーザー名称変更すると大丈夫だと思います
  • アップルストアは、年間登録料が $99ドルとかかいていたので、年間約1万数千円負担がいる。
    • iOS用にビルドするにはiOSが必要。
    • iOSはアップルストアから数千円で買える。
    • 個人のストア出店は実名登録
  • Windowsストアは、初期登録料が数千円いる.
    (更新料は無料になった)
  • Andoridストア(Googleplay) は、調べていないので不明。
    • 主メモリが数百MBで少ない機種が多く、アプリの容量が大きいものは嫌われる
      数メガバイトに抑えることが望ましい。大きくても10MB以下が理想。
    • メモリムーブ機能(SDカードに移動)がないと嫌われる

 

2016.06.13


7日間でWindows 10 アプリ開発者になる方法
https://blogs.msdn.microsoft.com/visualstudio_jpn/2015/09/08/windows-10-5/

徹底予習! Windows 10のユニバーサルアプリ開発
http://www.atmarkit.co.jp/ait/articles/1504/28/news015.html

グローバリゼーションとローカライズの推奨と非推奨
https://msdn.microsoft.com/windows/uwp/globalizing/guidelines-and-checklist-for-globalizing-your-app


.Net ネイティブ

2015より搭載された新機能
C#.Netをネイティブ化するMS純正ツール
これによりコードの難読化と高速化が期待できる

2016.06.12

アセンブリの暗号化ソフト


執筆:2010.09.02
編集:2016.06.12


.Net ネイティブ

2015より搭載された新機能
C#.Netをネイティブ化するMS純正ツール
これによりコードの難読化と高速化が期待できる


7日間でWindows 10 アプリ開発者になる方法
https://blogs.msdn.microsoft.com/visualstudio_jpn/2015/09/08/windows-10-5/

難読化ツール

.Net ネイティブの登場により、難読化ツールは、旧技術となった。
そのままでは、ソースコードを復元されてしまうため、中間コードを難読化するためのツール

検索ワード:.Net Obfuscator free

Eazfuscator.NET [ Free ]
http://www.foss.kharkov.ua/g1/projects/eazfuscator/dotnet/Default.aspx


CodeFort Professional - $199
http://codefort.org/

Babel.NET Enterprise - $249
http://www.babelfor.net/Licensing.aspx

Visual Studio Tools -- Dotfuscator Community edition

.NET アセンブリの難読化ツール
http://d.hatena.ne.jp/wwwcfe/20100513/obfuscator
カテゴリー: ぷろぐらみんぐ
2016.06.12

C言語のメモリリークテストをしたことがなかったので
調べてみました。 嘘かいているところが多く困りました。


このサンプルは、標準出力にエラーを送ります。
デバッガなどに送るには、_CrtSetReportModeを変更する必要があります。
いつでも再現できるように
コマンドも一緒に埋め込みました。

参考 MSDN
makeファイルへの挿入はこのようにします

nmake -f Makefile.msc DEBUG=1

!IFDEF DEBUG
CFLAGS += /D_DEBUG /D_CRTDBG_MAPALLOC /MTd /ZI /W3
!ENDIF

以下サンプルソース

/*
 *  testleek.c
 *
 [cmd.exe]
 "c:\Program Files\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"
 (1) リンクも一緒にする
cl.exe testleek.c /D_DEBUG /MTd /ZI -W3
testleek.exe
または (2) objだけ生成して後からリンクする
cl /c -D_DEBUG /MTd -Zi -W3 -Od testleek.c
link /debug testleek.obj testleek.exe */ # define _CRTDBG_MAP_ALLOC # include <stdlib.h> # include <crtdbg.h> int main(void){ _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); _CrtSetReportMode( _CRT_ASSERT, _CRTDBG_MODE_FILE ); _CrtSetReportMode( _CRT_ERROR , _CRTDBG_MODE_FILE ); _CrtSetReportMode( _CRT_WARN , _CRTDBG_MODE_FILE ); _CrtSetReportFile( _CRT_ASSERT, _CRTDBG_FILE_STDOUT ); _CrtSetReportFile( _CRT_ERROR , _CRTDBG_FILE_STDOUT ); _CrtSetReportFile( _CRT_WARN , _CRTDBG_FILE_STDOUT ); char * p=malloc(1000); malloc(7); // _CrtDumpMemoryLeaks(); return(0); }
カテゴリー: ぷろぐらみんぐ
2015.12.05

dllもstaticも両方ほしい欲張りな人の場合。
ソースフォルダを2つ用意してください。簡単確実な分離方法です。

パッチファイルだとバージョンを差し替えるたび不具合が出ると面倒なので
専用書き換えスクリプトで自動処理します。
.vcxprojを自動呼出しで一括置換します
変更箇所は下記にあります


今回は、ネタで終了。
サイズの問題と面倒なので、
環境変数pathに登録したマイbinフォルダにicuのdllいれておしまい。

» Visual Studio ICUライブラリの静的リンク'">続きを読む

2015.12.02


Dephi関連の値段の推移
Dephi2 Developer 68,000
Delphi 2005 Professional 71,400
Delphi Xe Professional 98,700
Delphi Xe7 Professional 129,600
Delphi 10.1 Berlin Professional  184,300
   
RAD Studio 2007 Professional 120,000
RAD Studio XE7 Professional 228,960
RAD Studio 10.1 Berlin Professional 326,800


マイクロソフト
Microsoft Visual Studio Professional 2013 通常版 54,843
Microsoft Visual Studio Professional 2013 with MSDN 通常版 137,268
Visual Studio Community 2015 フルバージョン 無料


用途によりますが
普通に考えて
マイクロソフトのExpress無料版 を使って
物足りなければ
Microsoft Visual Studio Professional 2013
製品版を購入したほうがよさそう。

機能制限なし、
Visual Studio Community 2015
が無料になって登場!!

Delphi のインフレはすごい。
客が離れる → 値上げ の無限ループ
もう、あれですよね。 終わった!!

» 続きを読む

カテゴリー: General
2014.09.13

また OpenSSLに重大な脆弱性、直ちにパッチ適用
春にも重大な脆弱性が発見されたばかりだ。

「OpenSSL」に新たな脆弱性が見つかり、6月5日(米国時間)に修正パッチがリリースされた。
この脆弱性はクライアント(使用者のパソコン)ではOpenSSLの全バージョンが影響を受ける。

ただより怖いものはない

2014年6月5日で修正された最新バージョンは以下の通り

OpenSSL 0.9.8 users should upgrade to 0.9.8za
OpenSSL 1.0.0 users should upgrade to 1.0.0m.
OpenSSL 1.0.1 users should upgrade to 1.0.1h.

http://www.openssl.org/

http://www.openssl.org/related/binaries.html


Visual C++ 2008 Redistributables
を不要にするには、自分で /MTで buildするしかない。
ということで 10分くらいかかりますが 自分で buildしています
アルファベットで バージョンを管理するのは
わかりにくいから
いい加減やめてほしい

» 続きを読む

カテゴリー: General
2014.06.07

TWebBrowser.HWNDを取得する方法 (メモ: その1)

執筆:2011.10.17
編集:2011.10.17

今日は、
  C#へレッツゴー
  さぁ Delphiなんか捨てて みんなドットネットへ Go !!
  それいけ ドットネット推進派 の 禁断のDelphiネタです。

次期Windows8 の 「Windows Developer Preview版」が無償公開 されていますが
もう みなさんは、お使いですか?
※OSのアンインストール機能がないそうなので、インス トールは気をつけてください
Visual Studio 11 Expressの同梱版もあり すごいお試し版OSです。
“Win RunTime(WinRT)”と呼ばれる新しいAPIが追加され
新しいデスクトップ“Metro”では、新しい“Metro”対応のアプリケーション(“Metro style apps”)
なんていうものが必要になるそうです。
キット古い開発環境とアプリを市場から強制排除したいのでしょうね。
もう、Visual Studio意外に開発環境の選択の余地がないって感じになってきましたね。
ということで、 ほらほら、 みんなドットネットへ Go !!

では、本題です。

TWebBrowser.HWNDへのアクセスは不正なエラーに なります。
WebBrowser1.Handleでいいようです。

構造
 
ClassName  

- Shell Embedding ← GetClassName(WebBrowser1.Handle)

-- Shell DocObject View 不明

--- Internet Explorer_Server ← 操作画面
解説URL

ページを表示するとコンテンツに応じて 上の3つが、階層構造で多様につながる。
iframeなどの要素があると多重構造になるようです。

※ コードを参考にする場合は、自己責任で参考にされてください。
※ 十分なテストが必要です。
※ 将来的に、仕様などの変更で利用できなくなることも考えられます。


【TWebBrowser.HWNDは、無効なプロパティ】
  (MSDN 文書番号: 244310):
 ※要約 子WindowをたどっていくとHandleを取得することができます。
※ TWebBrowser.HWND
Web ブラウザの Window ハンドルへのアクセスを提供します。
※ Delphiでは、TWebBrowser.HWNDは使えません。
コード WebBrowser1.HWND;
実行結果 デバッガ例外通知
 プロジェクト は例外クラス EOleException (メッセージ 'エラーを特定できません')を送出しました。


【HTML要素からhandleを取得する方法。】
ハンドルを 直接要求する方法

// [エラー] : E2010 'System.TGUID' と 'Ole2.TGUID' には互換性がありません
const // From Ole2.pas
  IID_IOleWindow: TGUID = (
  D1:$00000114;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));

function GetWindowHandleFromIDispatch(disp: IDispatch) : HWND;
 var
     h : hwnd;
     Res : HRESULT;
     oWin : IOleWindow; // Unit ActiveX.pas
begin
  // example: GetWindowHandleFromIDispatch(WebBrowser1.Document)
  Result := 0;
  Res := disp.QueryInterface(IID_IOleWindow, oWin);
  if Succeeded(Res) then
   begin
     Res := OWin.GetWindow(h);
     if (SUCCEEDED(Res)) then
        Result := h;
   end;
end;
使


// Class : Internet Explorer_Server
h := GetHTMLObjectWindowHandle(WebBrowser1.Document);
if (h > 0) then
  Windows.SetFocus(h);
(参考)正 規のhtml要素のfocusの使い方
 
// HtmlElement から直接呼び出す場合
// HtmlElement.focus();
  var
    v : Variant;
begin
  v_Doccument := WebBrowser1.Document;
  if Not VarIsClear(v_Doccument) then
    v_Doccument.focus();

 
  var
    v_Doccument, v_elems : Variant;
begin
  v_Doccument := WebBrowser1.Document;
  if VarIsClear(v_Doccument) then exit;
  v_elems   := v_Doccument.getElementsByName('ここにhtml要素の名前');
  if Not VarIsClear(v_elems)
     and (v_elems.length > 0) then
     v_elems.Item(0).focus();

擬似キー入力を送るコード:Function Key
  var
    H : THandle;
begin
  h := GetWindowHandleFromIDispatch(WebBrowser1.Document);
  Windows.PostMessage(H , WM_KEYDOWN, VK_F1 , 0);

擬似キー入力を送るコード:通常文字
  var
    H : THandle;
begin
  h := GetWindowHandleFromIDispatch(WebBrowser1.Document);
  Windows.PostMessage(H , WM_CHAR, Byte('a') , 0);
end;

ALT+F4(終了)を呼びたい場合は
WM_SYSKEYDOWN を使います
Windows.PostMessage(TargetHandle ,
            WM_SYSKEYDOWN , wParam, lParam);

wParam
lParam
VK_F4 + ALT VK_F4 
1 shl 29

VK_F1
IEのF1(ヘルプ)の呼び出しは、反応しないのでわかりません。
Firefox系の他のブラウザでは反応します。

テキストボックスに文字列をいれるだけなら、
普通にgetElementsByNameやgetElementByIdなどで
要素にアクセスして代入した方が安全に入力できます。

普通にテキストボックスに入力する方法
( 応用例:ログインIDなどの自動入力 )

  v_elems.Item(0).innerText := 'abc';
  .innerText
 
.innerHTML
コンボボックス
(selectタグのoption要素)
e.options[e.selectedIndex].text
e.options[e.selectedIndex].value
使い方は、基本的にJavaScriptと同じ。


【一番上のShell DocObject View の HWND 取得方法】
  GetWindow(WebBrowser1.Handle, GW_CHILD )
 ※ ClassNameで、確認した方がいい 、 GW_HWNDNEXT
  Navigateでフォルダを指定した場合、エクスプローラーが内蔵されるので注意。 SysListView32などが現れる。
function GetWebBrowser_Root_ShellDocObject_Handle(AWebBrowser : TWebBrowser) : hwnd;
// Shell DocObject View
 var
   h : hwnd;
begin
  h := GetWindow(AWebBrowser.Handle, GW_CHILD );
  while (h > 0) do
  begin
    if (Pos('Shell DocObject View', GetClassNameText(h)) = 1) then
     begin
       Result := h;
       Break;
     end;
    h := GetWindow(h, GW_HWNDNEXT );
  end;
end;
function GetWebBrowser_Root_IE_Server_Handle(AWebBrowser : TWebBrowser) : hwnd;
// Internet Explorer_Server
 var
   h : hwnd;
   h_child : hwnd;
begin
  h := GetWindow(AWebBrowser.Handle, GW_CHILD );
  while (h > 0) do
  begin
    if (Pos('Shell DocObject View', GetClassNameText(h)) = 1) then
     begin
       h_child := GetWindow(h, GW_CHILD );
       while (h_child > 0) do
        begin
          if (Pos('Internet Explorer_Server',
                   GetClassNameText(h_child)) = 1) then
           begin
             Result := h_child;
             break;
           end;
          h_child := GetWindow(h_child, GW_HWNDNEXT );
        end;
       if (Result > 0) then
         Break;
     end;
    h := GetWindow(h, GW_HWNDNEXT );
  end;
end;
 

【場所から取得する方法】
・ ChildWindowFromPoint関数を使用します。


ついでに、それいけみんなドットネットなので

C#で、ハンドルにメッセージを送る方法は
知らないので
        [System.Runtime.InteropServices.DllImport("user32.dll")]
        private extern static System.Boolean PostMessage(
          System.IntPtr hWnd, 
          System.UInt32 Msg,
          System.Int32 wParam,
          System.Int32 lParam);
で回避することができる。

カテゴリー: General
2011.10.19

C#で WebBrowserを使ってみよう(その1)

執筆:2011.10.15
編集:2011.10.16


Delphiで作ると実行ファイルが大きくなるし、Tabで WebBrowserコ ントロール内に移動できないので

さぁ C#だー
 はっはっはっ!
  って 試験動作させると
    瞬時に ずっこけました。

OnNewWindowで、Dispatchが設定したかったのです。

他にもいっぱいあるのですけど
NewWindowでDelphi相当の機能が実装されていないのです。
開くURLも取得できないし、Dispatchも設定できないなんて、酷い(ひどい)話です。

.Netには、なんの嫌がらせか知りませんが、本来つけておくべきイベントがたくさんないのです。

なんでもかんでも
新しいWindowで開くで、IEに送るのでは、WebBrowserを内蔵する意味がほとんどないでしょ。
(※IEに送るとセッションCookie?が引き継がれないから問題なんです。)

ということで、
.NetのWebBrowserを拡張して本来あるべきイベントを追加して対処しました。


 private void exWebBrowser1_NewWindow3(
    object sender,
    WebBrowserExtendedNewWindow3EventArgs e)
 {
     // メモ
     //  (1)e.pDisp に設定しない。新しいIEとして開く。
     //  (2)e.pDisp を設定する。指定したWebBrowserで開く。
     //     ※同じWebBrowserでは、e.pDispは、動作しない。
     //  (3)同じWebBrowserで開く。キャンセルNavigateを呼ぶ。
     //     ※POSTなどが失われるので注意。
     // MessageBox.Show((string) e.URL);
     // open as self WebBrowser
     //  e.Cancel = true; exWebBrowser1.Navigate((string) e.URL);
     // open as new WebBrowser
     //  e.pDisp = exWebBrowser2.ActiveXInstance;
 }

// using System.Runtime.InteropServices;
    public event EventHandler<WebBrowserExtendedNewWindow3EventArgs> NewWindow3;

    protected void OnNewWindow3( ... 省略
    ..... 省略

    [ComImport, Guid("34A715A0-6587-11D0-924A-0020AFC7AC4D"),
    InterfaceType(ComInterfaceType.InterfaceIsIDispatch),
    TypeLibType(TypeLibTypeFlags.FHidden)]
    public interface DWebBrowserEvents2
    {
       [DispId(273)]
       void NewWindow3(
           [In, Out, MarshalAs(UnmanagedType.IDispatch)] ref object pDisp,
           [In, Out] ref bool cancel,
           [In] ref object flags,
           [In] ref object URLContext,
           [In] ref object URL);
    }


読者に作る機会を与え、動作原理を理解させるために
あえて、完全なコードは開示していません。
不足分は、参考サイトを見ながら完成させましょう。

参考にした フォーラム が型とか ウソ書いていたので
少し手間だったヨ。

◎よくできました
とりあえず、目的の動作をするようにしたのでので「よし」としよう。


【参考サイト】
  • webBrowserで別のウインドウで開くときの開く先のURLの取得法
    とその中のリンク記事
    (VSUG フォーラム → .NET 開発  → Visual C#  → webBrowserで別のウインドウで開くときの開く先のURLの取得法)
  • MSDN Library for Visual Studio 2008
    ・CreateSink メソッド (使用例)
    ・他

2011.10.17

XE バージョンアップ

2006ユーザーは、年末まで。
えー、2005以下のユーザーは、値上げして切捨て。
ちょっと ひどくない!!
 値段が倍近く違うよ

ということは、来年は、2006以下のユーザーは、切捨て
という図式が当てはまるのかな

値段も上がったし、ますます自分で首絞めてますね。あの会社。

使いもしないのにバージョンアップを受けるためだけに毎年買うのはタダの馬鹿。
円馬鹿だろー の呪文に染まっていませんか?
2年間つかわないのなら、3年目に新規購入した方が全体で安いだろう。
キャンペーン時に買うとしても1年使わないなら見送った方が安い。

毎年、来年は、この機能が実装される予定ですって
同じことを毎年繰り返して
うそばっかりいって、客止めしているし
10年後には、きっと自滅するかもね。
自滅しないにしても、教育・趣味の世界から忘れ去られるだろう

特別アップグレードキャンペーンじゃダメ。
旧バージョンもバージョンアップキャンペーンしてくれない限り
もうDelphiは、買いません。
Visual Studioより高い価格で買う利点はありません。

今後64bit開発が必要になったら、Visual Studio Proを購入するでしょう

Delphiに
ふみとどまっている理由は、
・実行ファイル アセンブリの暗号化ツールが高い点
・C#(.netライブラリ)は、将来見捨てられないのか?
が主な理由です

高機能なフリーの.net4 アセンブリの暗号化ツールがあれば、
まよわず、新規アプリケーションは、
Visual Studio で作成するでしょう。
カテゴリー: General
2010.09.02

wget windos版の生成 with vs2008


執筆:2008.04.16


□GNUさんから最新版をダウンロードしました。

ftp://ftp.gnu.org/pub/gnu/wget/
http://www.gnu.org/software/wget/

□opensslがない場合は、インストールします。

コンパイル済みのものが便利です。 
http://www.openssl.org/related/binaries.html

□VS2008がない場合は、無料版でいいのでC++をインストールします。

Visual Studio 2008 Express Edition
http://www.microsoft.com/japan/msdn/vstudio/express/

準備ができたので始めます。


今回は、最新版はwget-1.11でしたのでそれを解凍しました

【初回または、OpenSSLのバージョンが変わった際に実施】

詳しくは、wget-x.xx\windows\READMEを読みます
OpenSSLのinclude\opensslとlibをコピーします
下記のコマンドは、間違うと大変なことになるので
エクスプローラーを使ってコピーした方がいいです。
  xcopy /S C:\OpenSSL\include\openssl\ "C:\Program Files\Microsoft Visual Studio 9.0\VC\include\openssl\"
xcopy /S C:\OpenSSL\lib\VC "C:\Program Files\Microsoft Visual Studio 9.0\VC\lib\"
copy C:\OpenSSL\lib\VC\libeay32MD.lib "C:\Program Files\Microsoft Visual Studio 9.0\VC\lib\libeay32.lib"
copy C:\OpenSSL\lib\VC\ssleay32MD.lib "C:\Program Files\Microsoft Visual Studio 9.0\VC\lib\ssleay32.lib"

【さぁ生成です】

面倒なので私はバッチファイルで処理しています。

wget_win_build_VS2008.bat

@rem http://www.gnu.org/software/wget/
@rem http://ftp.gnu.org/gnu/wget/
@rem --------
@rem Cコンパイラが必要。
@rem OpenSSLが必要
@rem --------
@rem 作り方は、
@rem wget-x.xx\windows\READMEを読みます
@rem --------
@rem wget-x.xx\configure.bat
@rem Usage: configure [--borland | --mingw | --msvc]
@rem 
@rem 【msvc】
@rem ★生成します
@rem call "C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\vsvars32.bat"
call "C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat"
call configure --msvc
NMAKE


echo src\wget.exe ができあがります
@rem pause 


【不正な属性でタグが終わっていた場合】

不正な属性(属性名=値無し>)でタグが終わっていた場合、ダウンローしてくれません。
下記のようにすると読み込んでくれるようになりますが、
どうなんでしょう?。。。

手順
<html><meta></meta><body>
<p>wget -p "this page URL"</p>
<p>wget can not save image2</p>
image1 <img src="image1.png"><br>
image2 <img src="image2.png" alt=><br>
</body></html>
回避 
修正

GNU Wget 1.11
src\html-parse.c
947:  goto backout_tag;
 if (attr_value_begin == attr_value_end)
                  /* <foo bar=> */
                  /*          ^ */
-       goto backout_tag;
+       break;
予期しないデータの破損などをするおそれがあります
・変更は、自己責任でしましょう。
・説明書(ソースコードも)をよく読み理解しておきましょう
カテゴリー: General
2008.04.23

Visual Studio 2005 Academic Edition
Software
Windows

2006-02-03
1500円以上[送料無料]
Visual Studio 2005 で検索

ジャンル別プログラミングその他
メーカー別ま行マイクロソフトその他

カテゴリー: ぷろぐらみんぐ
2006.02.20

PR

[PR]