PDA

View Full Version : باز کردن لینک یک سایت توسط buten در vb.net



saeidmobashery
پنج شنبه 25 خرداد 1402, 18:48 عصر
سلام بر اساتید عزیز
برای باز کردن سایت کد زیر را نوشتم ولی بی نتیجه بود

154724

این خطا را می‌دهد :

154725

پرستو پارسایی
پنج شنبه 25 خرداد 1402, 21:44 عصر
با این کد مرورگر پیش فرض دستور Button را اجرا میکند

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
System.Diagnostics.Process.Start("https://www.google.com/")
End Sub

saeidmobashery
پنج شنبه 25 خرداد 1402, 22:20 عصر
باز هم نشد :ناراحت:

154726

پرستو پارسایی
پنج شنبه 25 خرداد 1402, 22:41 عصر
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
System.Diagnostics.Process.Start("chrome.exe", "https://www.google.com/")
End Sub

اگر مرورگر پیش فرض شما کروم هست از این کد استفاده کنید اگر خیر در کد ارسالی نام مرورگر ویندوزتان را درج کنید

این خطا به این دلیل رخ می‌دهد که سیستم عامل نمی‌تواند آدرس وبسایت گوگل را به عنوان یک برنامه قابل اجرا تشخیص دهد. برای حل این مشکل، به جای آدرس وبسایت، باید مرورگر اینترنت را به عنوان برنامه‌ای قابل اجرا مشخص کنیم. برای این کار، می‌توانید از مرورگر اینترنت پیش‌فرض کامپیوتر خود استفاده کنید.

saeidmobashery
پنج شنبه 25 خرداد 1402, 22:52 عصر
بله کروم هست
گویا امروز من روی شانس نیستم این کد نیز جواب نداد
این خطا را داد :

154727


به نظر شما این چیزی که در سایت زیر هست ارتباطی با مشکل من دارد ؟

154728
https://community.atlassian.com/t5/Sourcetree-questions/System-ComponentModel-Win32Exception-The-System-cannot-find-the/qaq-p/295635

پرستو پارسایی
پنج شنبه 25 خرداد 1402, 23:02 عصر
هر دو کد صحیح کار میکند

saeidmobashery
پنج شنبه 25 خرداد 1402, 23:05 عصر
عالی بود در پروژه شما عالی کار کرد پس چرا در پروژه من کار نمی‌کنه ؟
پروژه شما را باز کردم ران کردم راحت مرورگر و آدرس را باز کرد
من از کد مزاحمی در بین کدهام استفاده کردم ؟

پرستو پارسایی
پنج شنبه 25 خرداد 1402, 23:17 عصر
عالی بود در پروژه شما عالی کار کرد پس چرا در پروژه من کار نمی‌کنه ؟
پروژه شما را باز کردن ران کردم راحت مرورگر و آدرس را باز کرد
من از کد مزاحمی در بین کدهام استفاده کردم ؟

بدون اطلاع از کدهای شما پاسخی نمیتوانم ارائه دهم!!!

saeidmobashery
پنج شنبه 25 خرداد 1402, 23:28 عصر
من پروژه ساده ای با همان کد شما ساختم ولی کار نمی‌کند
برایتان می‌فرستم ممنون می‌شوم بررسی فرمایید
بی نهایت سپاس خواهر گلم

154730

پرستو پارسایی
جمعه 26 خرداد 1402, 00:44 صبح
پروژه شما در ویژوال 2010 و 2015 من اجرا نشد و نتوانستم تنظیمات پروژه بررسی کنم

saeidmobashery
جمعه 26 خرداد 1402, 00:55 صبح
عجب شانسی من دارم ، از بابت وقتی که گذاشتید بی نهایت سپاس گزارم البته ویژال من ۲۰۲۲ تازه دانلودش کردم

پرستو پارسایی
جمعه 26 خرداد 1402, 01:10 صبح
مشکل همینه ورژن نرم افزار من با پروژه شما تفاوت داره

saeidmobashery
جمعه 26 خرداد 1402, 01:20 صبح
خانم پارسایی من در گروه سی شارپ تاپیکی با همین موضوع باز کردم ی کلیپ یوتوبی گذاشتم که راه حل را آموزش می‌داد ولی خودم نمی‌دونم برای وی بی چطوری باید بنویسم

پرستو پارسایی
جمعه 26 خرداد 1402, 10:15 صبح
احتمالا کتابخانه System.Diagnostics اضافه نشده است. برای اضافه کردن آن، می‌توانید به پروژه خود رفته و در قسمت Solution Explorer، روی نام پروژه خود کلیک کرده و سپس Add > Reference را انتخاب کنید. سپس در پنجره Reference Manager، به قسمت Assemblies رفته و کتابخانه System.Diagnostics را انتخاب کرده و OK را کلیک کنید.

saeidmobashery
جمعه 26 خرداد 1402, 13:46 عصر
شانس من ؛ فایده ای نداشت

پرستو پارسایی
جمعه 26 خرداد 1402, 18:32 عصر
Imports System.Runtime.InteropServices

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim url As String = "https://www.google.com/"
ShellExecute(IntPtr.Zero, "open", "chrome.exe", url, Nothing, 1)
End Sub


Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As IntPtr, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Integer) As IntPtr

با این کد تست کنید و اگر مسیر chrome.exe در محیط 64 بیتی ویندوز متفاوت باشد، باید مسیر جدید را در کد خود بیابید و در متغیر chromePath قرار دهید.

saeidmobashery
جمعه 26 خرداد 1402, 18:45 عصر
خانم پارسااااااااااااااااااااا ااااااااااااااااااااااااا ااااااااااااایی عاااااااااااااااااااااااا ااااااااااااااااالی بود :تشویق::تشویق::تشویق:

واقعا ممنونم کمک خیلی بزرگی بود داشت کل زحماتم به بن بست می‌خورد و برای اینکه این دستور اجرا شود داشتم به فرام ورک های کمتر از ۵ منتقل می شدم

مرورگر پیش فرض در سیستم‌های مشتریان ، کروم نباشد مشکلی پیش می‌آید ؟

پرستو پارسایی
جمعه 26 خرداد 1402, 20:02 عصر
Imports System.Runtime.InteropServices

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim url As String = "https://www.google.com/"
Dim browsers() As String = {"chrome.exe", "firefox.exe", "iexplore.exe", "MicrosoftEdge.exe"}
For Each browser In browsers
Dim result As IntPtr = ShellExecute(IntPtr.Zero, "open", browser, url, Nothing, 1)
If result.ToInt32() > 32 Then
Exit For
End If
Next
End Sub


Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As IntPtr, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Integer) As IntPtr

در این کد، ابتدا آدرس سایت گوگل را به عنوان url تعریف می‌کنیم. سپس یک آرایه از نام مرورگرهای پر مصرف را به عنوان browsers تعریف می‌کنیم. سپس با استفاده از حلقه For Each، برای هر مرورگر در آرایه browsers، یک نمونه از کلاس Process را ایجاد کرده و با استفاده از متغیر FileName، نام مرورگر را تعیین می‌کنیم. سپس با استفاده از ShellExecute()، فرآیند مرورگر را شروع می‌کنیم و آدرس سایت گوگل را به عنوان پارامتر ارسال می‌کنیم. در انتها با استفاده از ToInt32() و Exit For، از حلقه For Each خارج می‌شویم در صورتی که مرورگر مورد نظر نصب شده باشد.


یا با این کد :

Imports System.Runtime.InteropServices

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim url As String = "https://www.google.com/"
Dim browser As String = GetDefaultBrowser()
Dim result As IntPtr = ShellExecute(IntPtr.Zero, "open", browser, url, Nothing, 1)
End Sub


Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As IntPtr, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Integer) As IntPtr


Private Function GetDefaultBrowser() As String
Dim key As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey("HTTP\shell\open\command", False)
Dim value As String = key.GetValue(Nothing).ToString().ToLower()
If value.Contains("""") Then
value = value.Substring(value.IndexOf("""") + 1)
value = value.Substring(0, value.IndexOf(""""))
Else
value = value.Substring(0, value.IndexOf(" "))
End If
Return value
End Function


ابتدا آدرس سایت گوگل را به عنوان url تعریف می‌کنیم. سپس با استفاده از تابع GetDefaultBrowser()، نام مرورگر پیش فرض را به صورت خودکار از رجیستری سیستم بدست می‌آوریم. سپس با استفاده از ShellExecute()، فرآیند مرورگر پیش فرض را شروع می‌کنیم و آدرس سایت گوگل را به عنوان پارامتر ارسال می‌کنیم. در نهایت، با استفاده از متغیر result، می‌توانید نتیجه اجرای دستور را بررسی کنید.

saeidmobashery
جمعه 26 خرداد 1402, 23:54 عصر
احسنت خانم پارسایی دومین کد بسیار حرفه‌ای و عالی بود سپاس از حضور شما سپاس از وقتی که به اعضا تقدیم می‌کنید هر امری باشد بنده در خدمت هستم

saeidmobashery
شنبه 27 خرداد 1402, 00:03 صبح
154735
دومین کد این خطا را داد :گریه:

پرستو پارسایی
شنبه 27 خرداد 1402, 10:27 صبح
به این شکل استفاده کنید:

Imports System.Runtime.InteropServices

Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim url As String = "https://www.google.com/"
Dim browser As String = GetDefaultBrowser()
' مقدار برگشتی تابع ShellExecute را دریافت می‌کنیم و بررسی می‌کنیم که آیا اجرایی است یا خیر
Dim result As IntPtr = ShellExecute(IntPtr.Zero, "open", browser, url, Nothing, 1)
If result.ToInt32() <= 32 Then ' برای بررسی خطا بهینه‌تر است از علامت کوچکتر مساوی استفاده شود
' در صورتی که خطایی رخ دهد، پیام خطا را نمایش می‌دهیم
MessageBox.Show("خطا در باز کردن مرورگر: " & result.ToString())
End If
End Sub


Private Function GetDefaultBrowser() As String
Try
' برای جستجو در رجیستری از کتابخانه My.Computer.Registry استفاده می‌کنیم
Dim key As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey("HTTP\shell\open\command", False)


If key IsNot Nothing Then
' مقدار پیش فرض برای نام مرورگر
Dim value As String = key.GetValue(Nothing)?.ToString()?.ToLower()


' بررسی می‌کنیم که آیا مقدار value شامل علامت گیومه دوتایی است یا نه
If value IsNot Nothing AndAlso value.Contains("""") Then
' اگر شامل علامت گیومه دوتایی باشد، نام مرورگر را با استفاده از دستورات Substring() بدست می‌آوریم
value = value.Substring(value.IndexOf("""") + 1)
value = value.Substring(0, value.IndexOf(""""))
ElseIf value IsNot Nothing Then
' در غیر این صورت، نام مرورگر را با استفاده از دستورات Substring() بدست می‌آوریم
value = value.Substring(0, value.IndexOf(" "))
End If


Return value
Else
Return Nothing
End If
Catch ex As Exception
' در صورتی که خطایی در بدست آوردن نام مرورگر پیش فرض رخ دهد، خطا را نمایش می‌دهیم و مقدار خالی را برمی‌گردانیم
MessageBox.Show("خطا در بدست آوردن نام مرورگر پیش فرض: " & ex.Message)
Return Nothing
End Try
End Function


Private Const FORMAT_MESSAGE_FROM_SYSTEM As Integer = &H1000


<DllImport("kernel32.dll", CharSet:=CharSet.Auto)> _
Private Shared Function FormatMessage(ByVal dwFlags As Integer, ByRef lpSource As IntPtr, ByVal dwMessageId As Integer, ByVal dwLanguageId As Integer, ByRef lpBuffer As System.Text.StringBuilder, ByVal nSize As Integer, ByRef Arguments As IntPtr) As Integer
End Function


<DllImport("shell32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function ShellExecute(ByVal hwnd As IntPtr, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Integer) As IntPtr
End Function
End Class

saeidmobashery
شنبه 27 خرداد 1402, 15:35 عصر
سلام خانم پارسایی
خیلی عجیب بود ران کردم پوشه Documents باز شد